本文共 1376 字,大约阅读时间需要 4 分钟。
4 21 34 33 31 21 32 35 21 23 5999 00
102998 Hint Hint Huge input, scanf is recommended.
#include#include #include #include #include #include using namespace std;const int N=1000+5;int pre[N];bool book[N];inline void init(int n){ for(int i=1;i<=n;i++) pre[i]=i;}inline int find(int x){ int r=x; while(pre[r]!=r) //找到根路径 r=pre[r]; int i=x,j; while(i!=r){ //路径压缩 j=pre[i]; pre[i]=r; i=j; } return r;}inline void join(int x,int y){ int fx=find(x); int fy=find(y); if(fx!=fy){ // if(fx>fy) // pre[fy]=fx; // else pre[fx]=fy; } }void dfs(int n){ book[n]=1; if(pre[n]!=n) dfs(pre[n]);}int main(){ int n,m,re,a,b; while(scanf("%d",&n)==1){ if(n==0) break; re=0; init(n); memset(book,0,sizeof(book)); scanf("%d",&m); for(int i=0;i
转载地址:http://mbmvi.baihongyu.com/