1 条题解
-
0
C :
#include <stdio.h> #define Max 1000000 int main () { int a,b,n=0,tempa,tempb,tree[Max+1]; for(int i=0;i<Max;i++) tree[i]=-1; while(scanf("%d%d",&a,&b)!=EOF) { if(a>n) n=a; if(b>n) n=b; if(tree[a]==-1) tree[a]=0; if(tree[b]==-1) tree[b]=0; tempa=a; while(tree[tempa]) tempa=tree[tempa]; tempb=b; while(tree[tempb]) tempb=tree[tempb]; if(tempa!=tempb) tree[tempa]=tempb; } int count=0; for(int i=1;i<=n;i++) if(!tree[i]) count++; printf("%d\n",count); //getchar(); //getchar(); }C++ :
#include<stdio.h> #include<string.h> #include<map> #include<vector> using namespace std; int v[200005]; vector<int> l[200005]; map<int,int> mm; int n; int find(int k) { map<int,int>::iterator it=mm.find(k); if (it!=mm.end()) return it->second; int ret=mm.size(); mm.insert(make_pair(k,ret)); return ret; } void dfs(int k) { v[k]=1; for(int i=0;i<l[k].size();i++) { if (!v[l[k][i]]) dfs(l[k][i]); } } int main() { int t1,t2; while(scanf("%d %d",&t1,&t2)!=EOF) { t1=find(t1); t2=find(t2); if (t1!=t2) { l[t1].push_back(t2); l[t2].push_back(t1); } } n=mm.size(); for(int i=0;i<n;i++) v[i]=0; int ret=0; for(int i=0;i<n;i++) if (!v[i]) { dfs(i); ret++; } printf("%d\n",ret); return 0; }
信息
- ID
- 876
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者