zoukankan      html  css  js  c++  java
  • HRBUST 1311 火影忍者之~忍者村

    求连通块。

    $ABC$之间建好边,然后计算连通块的个数。

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    
    map<string,int>m;
    char op1[50],op2[50],op3[50];
    int n,sz,ans,f[10000];
    
    vector<int>G[3100];
    
    void dfs(int x)
    {
        f[x]=1;
        for(int i=0;i<G[x].size();i++)
        {
            if(f[G[x][i]]) continue;
            dfs(G[x][i]);
        }
    }
    
    int main()
    {
        while(~scanf("%d",&n))
        {
            m.clear();
            sz=1;
    
            for(int i=1;i<=3000;i++) G[i].clear();
            for(int i=1; i<=n; i++)
            {
                scanf("%s%s%s",op1,op2,op3);
                int A,B,C;
                if(m[op1]==0) m[op1]=sz++;
                if(m[op2]==0) m[op2]=sz++;
                if(m[op3]==0) m[op3]=sz++;
    
                A=m[op1];
                B=m[op2];
                C=m[op3];
    
                G[A].push_back(B);
                G[B].push_back(A);
    
                G[A].push_back(C);
                G[C].push_back(A);
    
                G[B].push_back(C);
                G[C].push_back(B);
            }
    
            memset(f,0,sizeof f); ans=0;
            for(int i=1;i<=sz-1;i++)
            {
                if(f[i]) continue;
                ans++;
                dfs(i);
            }
    
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    数据结构-串的堆分配存储
    ServerSocket
    Java-坦克大战
    Java-输入输出流
    MyEclipse 快捷键
    数据结构-串的定长顺序存储
    我的软考资料集合
    软考中级软件设计师考试大纲
    2016年第一季度阅读书目
    中国大陆开源镜像网站汇总
  • 原文地址:https://www.cnblogs.com/zufezzt/p/6518710.html
Copyright © 2011-2022 走看看