#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 14:04:28 浏览: 46
这段代码实现了一个并查集,用于解决连通性问题。具体来说,该并查集维护了一个数组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()函数也不会影响程序的正确性。
相关问题
统一文件名只用#include<iostream> #include<string.h>
这两个头文件的作用不同,<iostream> 是用于输入输出流的库,而<string.h> 是用于字符串处理的库。如果你的程序中需要使用字符串相关函数,如strcpy、strlen等,就需要用到<string.h>头文件。如果要使用cout和cin等输入输出流对象则需要使用<iostream>头文件。如果你两个都需要用到,那么你就需要同时包含这两个头文件。例如:
```cpp
#include <iostream>
#include <string.h>
using namespace std;
int main() {
char str1[10] = "hello";
char str2[10] = "world";
strcat(str1, str2); // 使用<string.h>中的字符串拼接函数strcat
cout << str1 << endl; // 使用<iostream>中的输出流对象cout
return 0;
}
```
阅读全文