uva10608

来源:互联网 发布:时时彩做计划软件 编辑:程序博客网 时间:2024/05/16 23:35
#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;int par[500005];int g[500005];int cases;int n,m;int find_par(int x){    return x==par[x]?x:find_par(par[x]);}void get_son_num()//这个解法不能把每个son直接连上祖先……而是统计数目的时候找的是祖先而不是父亲{    int num=0;    for(int i=1; i<=n; i++)    {         int x=find_par(i);          g[x]++ ;    }    sort(g+1,g+n+1);    cout<<g[n]<<endl;}void union_(int x,int y){    int a=find_par(x);    int b=find_par(y);    par[a]=b;}int main(){    //freopen("debug//in.txt","r",stdin);    //freopen("debug//out.txt","w",stdout);    cin>>cases;    while(cases--)    {        scanf("%d%d",&n,&m);        memset(g,0,sizeof(g));        for(int i=1; i<=n; i++)            par[i]=i;        for(int i=0; i<m; i++)        {            int a,b;            scanf("%d%d",&a,&b);            union_(a,b);        }        get_son_num();    }    return 0;}/*110 74 106 46 107 55 13 67 3*/

补一个统计数目的时候直接找父亲的代码

#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;int par[500005];int g[500005];int cases;int n,m;int find_par(int x){    return x==par[x]?x:find_par(par[x]);}void union_(int x,int y){    int a=find_par(x);    int b=find_par(y);    par[a]=b;}int main(){    cin>>cases;    while(cases--)    {        scanf("%d%d",&n,&m);        memset(g,0,sizeof(g));        for(int i=1; i<=n; i++)            par[i]=i;        for(int i=0; i<m; i++)        {            int a,b;            scanf("%d%d",&a,&b);            union_(a,b);        }        for(int i=1;i<=n;i++)            par[i]=find_par(i);        for(int i=1;i<=n;i++)        {            int x=par[i];            g[x]++;        }        sort(g+1,g+n+1);        cout<<g[n]<<endl;    }    return 0;}/*110 74 106 46 107 55 13 67 3*/
原创粉丝点击