一、畅通工程 传送门:
http://acm.hdu.edu.cn/showproblem.php?pid=1232
#include<bits/stdc++.h>
using namespace std;
int bin[1010];
int findx(int x){
int r=x;
while(bin[r]!=r){
r=bin[r];
}
return r;
}
void merge(int x, int y){
int fx=findx(x), fy=findx(y);
if(fx!=fy) bin[fx]=fy;
}
int main() {
int x, y, n, m;
while(cin>>n, n){
cin>>m;
int num=0;
for(int i=1; i<=n; i++){
bin[i]=i;
}
while(m--){
cin>>x>>y;
merge(x, y);
}
for(int i=1; i<=n; i++){
if(bin[i]==i) num++;
}
cout<<num-1<<endl;
}return 0;
}
二、How Many Tables 传送门:
http://acm.hdu.edu.cn/showproblem.php?pid=1213
#include<bits/stdc++.h>
using namespace std;
int bin[1010];
int findx(int x){
int r=x;
while(r!=bin[r]){
r=bin[r];
}
return r;
}
void merge(int x, int y){
int fx=findx(x), fy=findx(y);
if(fx!=fy){
bin[fx]=fy;
}
}
int main()
{
int t;
cin>>t;
while(t--){
int n, m, a, b;
cin>>n>>m;
for(int i=1; i<=n; i++){
bin[i]=i;
}
while(m--)
{
cin>>a>>b;
merge(a, b);
}
int num=0;
for(int i=1; i<=n; i++){
if(bin[i]==i) num++;
}
cout<<num<<endl;
}
return 0;
}
做多了,发现就是套个模板的事情。(●'◡'●)不定时更新题目。