#include<iostream> //#include <string.h> //memset()函数头文件 using namespace std; const int MaxSize=5000; int main() { int n,m,p,v; cin >> n >> m >> p; int i,j; int a[MaxSize]; //memset(a,0,sizeof(a)); for(v=0;v<m;v++) { cin >> i >>j; if(a[j]==0&&a[i]==0) { a[i]=a[j]=v+1; } else if(a[i]==0&&a[j]!=0) { a[i]=a[j]; } else if(a[j]==0&&a[i]!=0) { a[j]=a[i]; } } for(v=0;v<p;v++) { cin >> i >> j; if(a[i]==a[j]&&a[i]&&a[j]) cout<<"Yes"<<endl; else if(i==j) cout<<"Yes"<<endl; else cout<<"No"<<endl; } system("pause"); return 0; }
时间: 2024-02-02 20:04:28 浏览: 44
#include <iostream> #include<iomanip> using namespace std;九九乘法表
这段代码实现了一个并查集,用于解决连通性问题。具体来说,该并查集维护了一个数组a,其中a[i]表示节点i所属的连通块编号。初始时,所有节点的连通块编号都为0。在读入m条边时,对于每条边(i,j),如果i和j都没有被标记过,则将它们标记为同一个连通块(这里用v+1表示第v条边)。如果i或j已经被标记过,则将它们所在的连通块合并成一个。最后,查询p次,对于每个查询(i,j),如果i和j在同一个连通块中,则输出"Yes",否则输出"No"。
需要注意的是,这段代码中使用了注释掉的memset()函数,该函数用于将数组a全部初始化为0。由于本身a数组在定义时就初始化为0,因此这里注释掉memset()函数也不会影响程序的正确性。
阅读全文