1 条题解
-
0
C :
#include<stdio.h> #include<string.h> #define N 102 struct EDGE { int x,y; }edge[505]; int n,m; int parent[N]; int ans[505]; int find_parent(int p) { if (parent[p]==-1) { return p; } else { return parent[p]=find_parent(parent[p]); } } int find_merge(int a,int b) { a=find_parent(a); b=find_parent(b); if (a!=b) { parent[a]=b; return 1; } else { return 0; } } int main() { int i; while (scanf("%d%d",&n,&m)!=EOF) { memset(edge,0,sizeof(edge)); memset(parent,-1,sizeof(parent)); for ( i = 1; i <=m ; i++) { scanf("%d%d",&edge[i].x,&edge[i].y); } ans[m]=n; for ( i = m; i >=1 ; i--) { if(find_merge(edge[i].x,edge[i].y)) { ans[i-1]=ans[i]-1; } else { ans[i-1]=ans[i]; } } for ( i = 1; i <m ; i++) { printf("%d ",ans[i]); } printf("%d\n",n); } return 0; }
C++ :
#include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> using namespace std; int parent[110],num[510]; struct edge { int x,y; }ee[510]; int root(int p) { if(parent[p]==-1)return p; return parent[p]=root(parent[p]); } int main() { int j,i,m,n; while(scanf("%d%d",&n,&m)!=EOF) { memset(parent,-1,sizeof(parent)); memset(num,0,sizeof(num)); num[m]=n; for(i=1;i<=m;i++) scanf("%d%d",&ee[i].x,&ee[i].y); for(i=m;i>0;i--) { if(root(ee[i].x)!=root(ee[i].y)) { num[i-1]=num[i]-1; parent[root(ee[i].x)]=root(ee[i].y); } else num[i-1]=num[i]; } for(i=1;i<m;i++) printf("%d ",num[i]); printf("%d\n",num[m]); } return 0; }
- 1
信息
- ID
- 1809
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者