求确定身份的人的个数。

只能确定狼的身份,因为只能找到谁说了谎。但一个人是否是民,无法确定。

将人视作点,指认关系视作边,有狼边和民边两种边。

确定狼的方法只有两种:

  1. 在一个仅由一条狼边组成的环中,狼边指向的那个点必定是狼。

  2. 环外指认铁狼为民的也必定是狼。

所以用原图找环求情况1中的铁狼,反向建图找情况2中的狼。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn =1e5+;
const int INF =0x3f3f3f3f;
struct Edge{
int v;bool w;
};
Edge G[maxn];
vector<Edge> rG[maxn];
int pre[maxn],dfn;
bool isw[maxn];
queue<int> Q;
int res; void init(int N){
res=;
memset(pre,,sizeof(pre));
memset(isw,,sizeof(isw));
for(int i=;i<=N;++i) rG[i].clear();
} void AddEdge(int u,int v,bool w){
G[u] = (Edge){v,w};
rG[v].push_back((Edge){u,w});
} void BFS()
{
while(!Q.empty()){
int u = Q.front();Q.pop();
for(int i=;i<rG[u].size();++i){
Edge &e =rG[u][i];
if(!e.w && !isw[e.v]){
Q.push(e.v);
isw[e.v] = true;
}
}
}
} void Tarjan(int u){
int v;bool w;
pre[u]=;
v= G[u].v;
w = G[u].w;
if(!pre[v])
Tarjan(v);
else if(pre[v]==){ //找到环
int cnt=, tar,t;
for(t=v;;t= G[t].v){
Edge &e = G[t];
if(e.w){
cnt++;
tar = G[t].v;
}
if(e.v==v) break;
}
if(cnt==){ //只有一个狼边才行
isw[tar] = true;
Q.push(tar);
}
}
pre[u]=;
} int main()
{
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
freopen("1009.out","w",stdout);
#endif
int T,N,u,v,tmp;
char op[];
scanf("%d",&T);
while(T--){
scanf("%d",&N);
init(N);
for(int u=;u<=N;++u){
scanf("%d %s",&v,op);
if(op[]=='w') AddEdge(u,v,);
else AddEdge(u,v,);
} for(int i =;i<=N;++i){
if(!pre[i])
Tarjan(i);
}
BFS();
for(int i=;i<=N;++i)
if(isw[i]) res++;
printf("%d %d\n",,res);
}
return ;
}

HDU - 6370 Werewolf 2018 Multi-University Training Contest 6 (DFS找环)的更多相关文章

  1. HDU 6370 Werewolf 【并查集】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6370 Werewolf Time Limit: 2000/1000 MS (Java/Others)   ...

  2. hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 Fighting the Landlords Time Limit: 2000/1000 MS ...

  3. HDU 6143 - Killer Names | 2017 Multi-University Training Contest 8

    /* HDU 6143 - Killer Names [ DP ] | 2017 Multi-University Training Contest 8 题意: m个字母组成两个长为n的序列,两序列中 ...

  4. HDU 6074 - Phone Call | 2017 Multi-University Training Contest 4

    看标程的代码这么短,看我的.... 难道是静态LCA模板太长了? /* HDU 6074 - Phone Call [ LCA,并查集 ] | 2017 Multi-University Traini ...

  5. HDU 6068 - Classic Quotation | 2017 Multi-University Training Contest 4

    /* HDU 6068 - Classic Quotation [ KMP,DP ] | 2017 Multi-University Training Contest 4 题意: 给出两个字符串 S[ ...

  6. HDU 6076 - Security Check | 2017 Multi-University Training Contest 4

    /* HDU 6076 - Security Check [ DP,二分 ] | 2017 Multi-University Training Contest 4 题意: 给出两个检票序列 A[N], ...

  7. HDU 6071 - Lazy Running | 2017 Multi-University Training Contest 4

    /* HDU 6071 - Lazy Running [ 建模,最短路 ] | 2017 Multi-University Training Contest 4 题意: 四个点的环,给定相邻两点距离, ...

  8. HDU 6078 - Wavel Sequence | 2017 Multi-University Training Contest 4

    /* HDU 6078 - Wavel Sequence [ DP ] | 2017 Multi-University Training Contest 4 题意: 给定 a[N], b[M] 要求满 ...

  9. HDU 6070 - Dirt Ratio | 2017 Multi-University Training Contest 4

    比赛时会错题意+不知道怎么线段树维护分数- - 思路来自题解 /* HDU 6070 - Dirt Ratio [ 二分,线段树 ] | 2017 Multi-University Training ...

随机推荐

  1. 第一百四十一节,JavaScript,封装库--DOM加载

    JavaScript,封装库--DOM加载 DOM加载,跨浏览器封装DOM加载,当网页文档结构加载完毕后执行函数,不等待图片音频视频等文件加载完毕 /** dom_jia_zai()函数,DOM页面加 ...

  2. linux和android端的pthread学习

    本文起初主要想写个演示样例实測下pthread_mutex_lock和pthread_mutex_trylock差别.在linux机器上非常快就over了,可是想了一下.pthread是unix系的, ...

  3. VC++显示文件或文件夹属性

    When you select a file or folder in Explorer window, and choose 'Properties' from the menu, you get ...

  4. iOS从当前隐藏导航界面push到下一个显示导航界面出现闪一下的问题

    本文转载至 http://blog.csdn.net/woaifen3344/article/details/41284319 navios 如果有朋友遇到从当前隐藏导航界面push到下一个显示导航界 ...

  5. c++ new(不断跟新)

    1.基础知识 /* 可以定义大小是0的数组,但不能引用,因为没有指向任何对象 new string[10]调用类的默认构造函数 new int[10]没有初始化,但new int[10]()会将数组初 ...

  6. because it violates the following Content Security Policy directive: "default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'". Note that 'script-src' was not explicitly set, so 'default-s

    html文件 修改成如下:<meta http-equiv="Content-Security-Policy" content="default-src *; st ...

  7. 【BZOJ3673/3674】可持久化并查集/可持久化并查集加强版 可持久化线段树

    [BZOJ3674]可持久化并查集加强版 Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了! ...

  8. Oracle的聚合函数group by结合CUBE和ROLLUP的使用

    转自:https://docs.oracle.com/cd/E11882_01/server.112/e25554/aggreg.htm#DWHSG8618 CUBE Syntax CUBE appe ...

  9. 使用electron进行原生应用的打包

    因为信奉一句话:JavaScript 终将一统天下,所以要想方设法开疆扩土. 今天介绍的这个electron就是一大神器,可以很方便的将网页应用打包为Mac, Win, Linux下的可执行文件,只需 ...

  10. HTTP缓存实现的原理

    浏览器是如何知道使用缓存的,其实这都是通过http中,浏览器将最后修改时间发送请求给web服务器,web服务器收到请求后跟服务器上的文档最后修改的时间对比,如果web服务器上最新文档修改时间小于或者等 ...