HDU - 6370 Werewolf 2018 Multi-University Training Contest 6 (DFS找环)
求确定身份的人的个数。
只能确定狼的身份,因为只能找到谁说了谎。但一个人是否是民,无法确定。
将人视作点,指认关系视作边,有狼边和民边两种边。
确定狼的方法只有两种:
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找环)的更多相关文章
- HDU 6370 Werewolf 【并查集】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6370 Werewolf Time Limit: 2000/1000 MS (Java/Others) ...
- 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 ...
- HDU 6143 - Killer Names | 2017 Multi-University Training Contest 8
/* HDU 6143 - Killer Names [ DP ] | 2017 Multi-University Training Contest 8 题意: m个字母组成两个长为n的序列,两序列中 ...
- HDU 6074 - Phone Call | 2017 Multi-University Training Contest 4
看标程的代码这么短,看我的.... 难道是静态LCA模板太长了? /* HDU 6074 - Phone Call [ LCA,并查集 ] | 2017 Multi-University Traini ...
- HDU 6068 - Classic Quotation | 2017 Multi-University Training Contest 4
/* HDU 6068 - Classic Quotation [ KMP,DP ] | 2017 Multi-University Training Contest 4 题意: 给出两个字符串 S[ ...
- HDU 6076 - Security Check | 2017 Multi-University Training Contest 4
/* HDU 6076 - Security Check [ DP,二分 ] | 2017 Multi-University Training Contest 4 题意: 给出两个检票序列 A[N], ...
- HDU 6071 - Lazy Running | 2017 Multi-University Training Contest 4
/* HDU 6071 - Lazy Running [ 建模,最短路 ] | 2017 Multi-University Training Contest 4 题意: 四个点的环,给定相邻两点距离, ...
- 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] 要求满 ...
- HDU 6070 - Dirt Ratio | 2017 Multi-University Training Contest 4
比赛时会错题意+不知道怎么线段树维护分数- - 思路来自题解 /* HDU 6070 - Dirt Ratio [ 二分,线段树 ] | 2017 Multi-University Training ...
随机推荐
- Oracle常用命令大全
一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 oracle>svrmgrl ...
- 第二百零六节,jQuery EasyUI,Menu(菜单)组件
jQuery EasyUI,Menu(菜单)组件 学习要点: 1.加载方式 2.菜单项属性 3.菜单属性 4.菜单事件 5.菜单方法 本节课重点了解 EasyUI 中 Menu(菜单)组件的使用方法, ...
- Java WEB 之页面间传递特殊字符
本文是学习网络上的文章时的总结以及自己的一点实践.感谢大家无私的分享. 昨天在做项目的时候,有一个页面间传递特殊字符的需求,查了一些资料.如今将自己的经验写出来. 首先.在前台编码 var fckPu ...
- linux memcache 安装
一,安装所要的软件 wget http://www.monkey.org/~provos/libevent-1.2.tar.gz #下载libevent 下面是下载memcache服务哭端memcac ...
- MathType可以在Word、PPT中插入矩阵吗
工科学生或者老师在写论文时最头痛的就是编辑公式,因为word自带的公式编辑器往往满足不了专业的公式需求,MathType就很好的解决了这个问题.在进行公式编辑时,难免会遇到输入矩阵的情况,那么怎么输入 ...
- java 包冲突解决方法
1.诊断包冲突 java.lang.NoSuchMethodError: org.apache.commons.io.output.DeferredFileOutputStream.<init& ...
- WPF之数据绑定
WPF学习之数据绑定 1. Banding基础 WPF中的数据绑定提供了很强大的功能.与普通的WinForm程序相比,其绑定功能为我们提供了很多便利,例如Binding对象的自动通知/刷新,Conve ...
- UIWebview打开.txt文件中文乱码解决
用UIWebview打开txt文件有时候会出现乱码的情况,这种情况应该是txt的编码问题,解决方案如下: txt分带编码和不带编码两种,带编码的如UTF-8格式txt,不带编码的如ANSI格式txt. ...
- python 之 GIL(线程和进程的应用)
一.GIL:http://www.tuicool.com/articles/7zIra2r http://www.zhihu.com/question/23474039 二.线程锁 在threadi ...
- $routeParams传递路由参数
$routeParams传的值是一个对象数组. 案例: index.html <!DOCTYPE html> <html lang="zh-cn" data-ng ...