luogu1892團夥
阿新 • • 發佈:2018-04-07
main stream iostream tdi clas arp 數組 %d scanf
題解:
讓一個二維數組存一下他的敵人
舉例:ans[i][0] 就是i的敵人的個數,然後a[i][j]就是指他第j個敵人。
#include<iostream> #include<cstdio> #define X 10000+7 using namespace std; int fa[X],ans[X][X]; int find(int x) { if(fa[x]==x)return x; return fa[x]=find(fa[x]); } int hb(int x,int y) { int ff=find(x),fff=find(y); fa[ff]=fff; } int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) fa[i]=i; char a; for(int i=1,x,y;i<=m;++i) { cin>>a>>x>>y; if(a==‘F‘)hb(x,y); if(a==‘E‘) { for(int j=1;j<=ans[y][0];++j) { hb(x,ans[y][j]); } for(int j=1;j<=ans[x][0];++j) hb(y,ans[x][j]); ans[x][++ans[x][0]]=y; ans[y][++ans[y][0]]=x; } } int k=0; for(int i=1;i<=n;++i) { if(fa[i]==i)k++; } cout<<k; }
luogu1892團夥