• 2018杭电多校第六场1009(DFS,思维)


    #include<bits/stdc++.h>
    using namespace std;
    int a[100010];
    char s[20];
    int zhiren[100010];
    vector<int>haoren[100010];
    int sum=0;
    void dfs(int x,int y,int flag)
    {
        if(x==y)
            flag=1;//如果和被指认的人相同,则定为狼
        sum+=flag;//并且后面直接或间接认为刚才那个是狼的人是好人的人也都是狼
        for(int i=0;i<haoren[y].size();i++)
        {
            dfs(x,haoren[y][i],flag);//搜索认为指认他人是狼人的这个人是好人的人
        }
        return;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            sum=0;
            int n;
            scanf("%d",&n);
            memset(zhiren,0,sizeof(zhiren));
            for(int i=0;i<=n;i++)
            {
                haoren[i].clear();
            }
            for(int i=1;i<=n;i++)
            {
                scanf("%d%s",&a[i],s);
                if(s[0]=='v')
                {
                    haoren[a[i]].push_back(i);//把认为a[i]是好人的人i放入向量中
                }
                else
                {
                    zhiren[i]=a[i];//i认为a[i]是狼人
                }
            }
            for(int i=1;i<=n;i++)
            {
                if(zhiren[i])//找到第一个被认为是狼人的人
                {
                    dfs(zhiren[i],i,0);//从这个人开始dfs
                }
            }
            printf("0 %d ",sum);//所有人都是狼人的情况是成立的
        }
        return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    POJ 1426 Find The Multiple (DFS / BFS)
    C++的class的样例
    HDU 5063 Operation the Sequence(暴力 数学)
    VmWare 与 宿主主机通信 STEP BY STEP (适用于刚開始学习的人)
    Pig源代码分析: 简析运行计划的生成
    Extjs, 使用GridPanel出现 Layout run failed
    Codeforces #258 Div.2 E Devu and Flowers
    pat(A) 2-06. 数列求和(模拟摆竖式相加)
    javaWeb Cache技术――OSCache(转-全)
    108句个性搞笑签名 (转)
  • 原文地址:https://www.cnblogs.com/ldudxy/p/9489358.html
Copyright © 2020-2023  润新知