lightoj1009【DFS】

来源:互联网 发布:windows平板如何刷机 编辑:程序博客网 时间:2024/06/05 21:58
思路:

连通快+二分图,每次+二分图大的元素个数。

#include<bits/stdc++.h>using namespace std;typedef unsigned long long ULL;typedef long long LL;const int N=2e4+10;bool ex[N],vis[N];vector<int>e[N];int n,au,av; void DFS(int u,int flag){    if(flag) av++;    else au++;    int sz=e[u].size();    for(int i=0;i<sz;i++)    {        int v=e[u][i];        if(vis[v]) continue;        vis[v]=true;        DFS(v,1-flag);    }} int main(){    int cas=1,T;    scanf("%d",&T);    while(T--)    {        int u,v;        scanf("%d",&n);        for(int i=1;i<=20000;i++)            e[i].clear();        memset(ex,false,sizeof(ex));        for(int i=0;i<n;i++)        {            scanf("%d%d",&u,&v);            ex[u]=ex[v]=true;            e[u].push_back(v);            e[v].push_back(u);        }        memset(vis,false,sizeof(vis));        int ans=0;        for(int i=1;i<=20000;i++)        {            if(ex[i]&&!vis[i]){                au=0;                av=0;                vis[i]=true;                DFS(i,0);                ans=ans+max(au,av);            }        }        printf("Case %d: %d\n",cas++,ans);    }    return 0;} 


0 0
原创粉丝点击