HDU 6370 Werewolf 【并查集】

基于STM32设计的老人防摔倒报警设备(OneNet)_65 本文设计了一种基于STM32单片机的智能老人防摔倒报警设备。该系统结合MPU6050陀螺仪传感器实时监测老人的姿态变化,检测摔倒事件;通过SIM800C通信模块发送短信通知紧急联系人,并将GPS定位信息上传至云端平台,确保家属能够及时了解老人的准确位置。 阅读详情

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6370

Werewolf

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 2680    Accepted Submission(s): 806


Problem Description
"The Werewolves" is a popular card game among young people.In the basic game, there are 2 different groups: the werewolves and the villagers.

Each player will debate a player they think is a werewolf or not. 

Their words are like "Player x is a werewolf." or "Player x is a villager.".

What we know is :

1. Villager won't lie.

2. Werewolf may lie. 

Of cause we only consider those situations which obey the two rules above. 

It is guaranteed that input data exist at least one situation which obey the two rules above.

Now we can judge every player into 3 types :

1. A player which can only be villager among all situations, 

2. A player which can only be werewolf among all situations.

3. A player which can be villager among some situations, while can be werewolf in others situations.

You just need to print out the number of type-1 players and the number of type-2 players. 

No player will talk about himself.
 

 

Input
The first line of the input gives the number of test cases T.Then T test cases follow.

The first line of each test case contains an integer N,indicating the number of players.

Then follows N lines,i-th line contains an integer x and a string S,indicating the i-th players tell you,"Player x is a S."

limits:

1≤T≤10

1≤N≤100,000

1≤x≤N

S∈ {"villager"."werewolf"}
 

 

Output
For each test case,print the number of type-1 players and the number of type-2 players in one line, separated by white space.
 

 

Sample Input
1
2
2 werewolf
1 werewolf
 

 

Sample Output
0 0
 

 

Source

 

题意概括:

读题意前要清空一下记忆,这里的狼人杀和实际的狼人杀规则不太一样。

每人按顺序说出一个人的角色(不能说自己的)

1、村民一定说真话

2、狼人有可能说假话。

求:

一定是村民的数量 和 一定是狼人的数量。

 

解题思路:

模拟了一下,感觉并不会有村民,因为没有方案可以证明出某个人一定是村民,因为狼人有“可能”说谎。

但我们可以确认哪些一定是狼人,即存在环,环的最后是 狼人边,其余都是村民边,那么被狼人边指的一定是狼人。

而用村民边指向这个狼人的角色也一定是狼人。

那么DFS,村民边建正向边,狼人边建反向边。

遍历狼人边,判断是否存在上述的环,如果存在再继续拓展。

大佬的证明:https://blog.youkuaiyun.com/weixin_39453270/article/details/81515570

AC code:

 1 #include <bits/stdc++.h>
 2 #define INF 0x3f3f3f3f
 3 #define LL long long
 4 using namespace std;
 5 const int MAXN = 1e5+10;
 6 
 7 int N, M;
 8 int w[MAXN];
 9 vector<int>fa[MAXN], son[MAXN];
10 bool vis[MAXN];
11 int ans[MAXN], cnt;
12 
13 void add1(int a, int b)
14 {
15     fa[a].push_back(b);
16 }
17 
18 bool dfs(int a, int b)
19 {
20     bool flag = true;
21     for(int i = 0; i < fa[a].size(); i++){
22         if(fa[a][i] == b) return false;
23         flag = dfs(fa[a][i], b);
24         if(!flag) return false;
25     }
26     return flag;
27 }
28 
29 void dfs2(int x)
30 {
31     if(!vis[x]) return;
32     vis[x] = false;
33     for(int i = 0; i < fa[x].size(); i++){
34         if(vis[fa[x][i]]){
35             cnt++;
36             dfs2(fa[x][i]);
37         }
38     }
39 }
40 
41 int main()
42 {
43     //freopen("6370in.txt", "r", stdin);
44     int T_case, id, tot = 0;
45     char ty[10];
46     scanf("%d", &T_case);
47     while(T_case--){
48         cnt = 0;
49         tot = 0;
50         memset(vis, 1, sizeof(vis));
51         scanf("%d", &N);
52         for(int i = 1; i <= N; i++){ fa[i].clear();son[i].clear();}
53 
54         for(int i = 1; i <= N; i++){
55             scanf("%d %s", &id, &ty);
56             if(ty[0] == 'w'){
57                 w[++tot] = i;
58                 son[i].push_back(id);
59             }
60             else{
61                 add1(id, i);
62             }
63         }
64         for(int i = 1; i <= tot; i++){
65             if(!vis[w[i]]) continue;
66             for(int k = 0; k < son[w[i]].size();k++){
67                 if(!vis[son[w[i]][k]]) continue;
68                 if(!dfs(w[i], son[w[i]][k])){
69                     //puts("zjy");
70                     cnt++;
71                     dfs2(son[w[i]][k]);
72                 }
73             }
74         }
75 
76         printf("0 %d\n", cnt);
77     }
78 }

 

KingSCADA实现按钮点击效果 哈喽,你好啊,我是雷工!在做SCADA项目的时候,按钮是不可缺少的功能,但软件自带的按钮太丑,已经无法满足现如今客户对界面美观度的要求。这时候就需要UI小姐姐设计美观大气的SCADA界面,但UI设计的按钮切图放到程序中只是图片素材,当添加了按钮功能时,虽然能实现按钮功能,但没有任何点击效果;当遇到有需要连锁条件才能点击的按钮时,操作员无法区分是有连锁点击了没反应,还是系统界面卡死了导致的没点击成功,这时候有点击效果就能很好的区分这种问题。本篇介绍一种实现按钮点击效果的方法,以下为操作过程。 阅读详情

相关推荐

金蝶ERP元数据解析:字段属性与表结构映射实战

本文深入解析金蝶ERP元数据的核心价值与应用实践,详细介绍了字段属性与表结构映射的关键技术。通过缓存获取与工具类直连两种方案对比,结合实际案例展示元数据在数据库校验、动态表单生成等场景的应用,帮助开发者高效解决二次开发中的常见问题。

weixin_33738555的博客 434

hdu 6370 Werewolf (思维+找环)

http://acm.hdu.edu.cn/showproblem.php?pid=6370 题意: 有n个人玩狼人杀。每个人都会发言 内容是 x是werewolf(狼) 或者 x是villager(村民)。村民不会说谎,狼可说谎也可不说谎。每个人都不能说自己。求最终可以确定多少个村民和多少只狼。 思路: 因为狼可以说真话说假话,那么肯定无法确定是否为村民,所以可以确定的村民的数量为0 ...

Oops的博客 337

Robocopy 参数进阶:/MIR 镜像同步与 /PURGE 删除操作的风险规避指南

本文深入解析Robocopy的/MIR镜像同步与/PURGE删除操作的高级用法及风险规避策略。通过实际案例和四重防护机制,指导用户安全实现目录同步,避免数据丢失风险,特别适用于远程主机间的数据复制与备份场景。

weixin_33462927的博客 357

HDU 6370 Werewolf——思路题

vector卡到绝望。。。。。。 #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; using namespace std; const int maxn = 1e5 + 10; int mem...

hao_zong_yin的博客 783

SAP物料分类账实战:从配置到月结的关键步骤(基于S/4HANA1909)

本文详细解析了在SAP S/4HANA 1909系统中,物料分类账从基础配置到月结操作的全流程。作为成本核算的核心,物料分类账通过多级价格确定实现实际成本核算,关键步骤包括激活物料分类账、配置自动过账科目(OBYC)、运行CKMLCP进行差异分摊与结算。文章旨在帮助财务与成本会计人员确保成本差异的准确归集与分摊,顺利完成月结。

weixin_28314575的博客 197

实用软件工程(第2版)吕云翔编简答题部分答案(自用整理)

整理自用

m0_61217768的博客 4107

HDU 6370 Werewolf (骚)

题目链接 有一群人,每个人可能是村民也可能是狼。村民必然说真话,狼有可能说假话。每一个人都指认了另外一个人是村民/狼,问一定是村民、一定是狼的人有多少个。 考虑狼是随机说真话或者假话,那么令每个人都为狼,一定存在一个解。因此一定是村民的数目为0。 考虑只连村民边,这样会产生若干个联通分量。可以得出这些联通分量要么是基环树,要么是树。加入狼边以后,这些联通分量必然也只可能是基环树或树。加入狼边的...

NPU_SXY的博客 277

ms17-010 永恒之蓝漏洞利用+抓包分析过程

一、实验环境: 1、攻击机:Kali 1)攻击工具:msf 2)分析工具:wireshark 3)IP地址:192.168.204.157(自动获得) 2、靶 机:Windows7 1)版本:SP1 2)开启网络共享(SMB协议) 3)关闭防火墙 4)IP地址:192.168.204.150(自动获得) 3、网卡连接方式:Vmnet8(NAT) 二、实验步骤: ...

qq_41976183的博客 6948

HDU 6370 Werewolf 【推理+基环树】

题目链接 题意:有n个人玩游戏,每个人会说另一个人是狼人或者村民,已知狼人可能说谎话,村民一定说真话,问最终有几个人一定是狼人,几个人一定是村民。 参照题解。村民边反向建边,狼人边正向建边。枚举所有的狼人边,如果这条狼人边的起点和终点同属于一个连通块则标记终点所在子树都是狼人。用并查集维护连通块。 #include &lt;iostream&gt; #include &lt;cs...

hxh的博客 310

手把手教你玩转CPU微架构专栏--​​​​1.5 工具准备:用Gem5模拟器“看见”微架构(安装、基础仿真命令)​

本文介绍了如何使用Gem5模拟器进行微架构学习和实验。Gem5是一款支持多种指令集的开源微架构模拟器,可模拟CPU流水线、缓存等核心组件。文章详细说明了在Ubuntu和macOS上安装Gem5的步骤,包括依赖安装、源码编译和验证方法。通过一个简单的加法指令测试程序,演示了如何运行基础仿真并解读输出日志,包括指令执行流程和性能统计数据。此外,还提供了两个实战实验:修改L1缓存大小和观察分支预测失败,帮助读者理解微架构参数对性能的影响。最后指出Gem5是学习微架构的"显微镜",能直观观察指令

xiaoheshang_123的博客 141

如何使用Docker部署OpenClaw小龙虾(docker compose快速部署)

本文以飞牛NAS为例💻,带大家一步步完成Docker部署OpenClaw小龙虾🦞。不管你是用NAS、云服务器还是本地电脑,只要支持Docker,都可以参考这个步骤来安装部署⚡

XiaoqiangClub的博客 729

HDU 6370 Werewolf 题解(并查集+图论+DFS)

题意简述 一群人玩♂游♂戏。游戏中有两种人,村民和狼人,村民只会说真话,狼人随便(真或假均珂)。给定一些关系,表示第iii个玩家说第jjj个玩家是狼人/村民。请分别找出确定是村民/狼人的个数。 数据 输入 多组数据。第一行是一个TTT,表示有TTT组数据。每组数据中有一个n(n&lt;=105)n(n&lt;=10^5)n(n<=105),表示有多少人。接下来nnn行,第ii...

LightningUZ的博客 349

RK3568平台开发系列讲解:Linux wifi的调试

查询结果中state为ENABLE,表示hostapd程序启用成功。首先查看设备是否存在。

内核笔记 168

hdu 6370Werewolf 并查集、思维

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6370 因为狼人能说谎话也能说实话,所以所有人都有可能是狼人,能确定的村民数量为0 要判断一个人是不是狼人,先假设他是村民,然后看是否有矛盾(他认为的村民说他是狼人),若有矛盾说明他是狼人,然后说他是村民的人也一定是狼人。 县用并查集维护所有村民的边,然后对村民边反向建边。代码比较简单 #in...

大乐的博客 239

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

hdu 6370 Werewolf 并查集

多校六第九题,当时玩了一下午的2-sat,一直玩到自闭.....赛后看了题解后,发现分析的就不对,首先可以假设所有人都是狼,显然没什么毛病,所以确定为村民的人肯定就是0,怎么找到铁狼的数量呢,首先从说话的人连接一条有向边到被说的人,假设存在以下的环,D说A是狼,其他边都是村民边,假设A是村民,得出D也是村民,然后根据D得出A是狼,自相矛盾,所以A必狼。且说铁狼是村民的也是铁狼。     那么再...

ccsu_cat 419

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

hdu6370 搜索 + 并查集 Werewolf

Werewolf Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 448 Accepted Submission(s): 85 Problem Description “The Werewolves” is a popu...

qq_36386435的博客 874

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

HDU6370 Werewolf【并查集】

 晚点补题解 #include &lt;bits/stdc++.h&gt; using namespace std; const int MAXN = 100010; int tot,head[MAXN],q[MAXN],f[MAXN]; bool vis[MAXN]; char str[10]; struct data { int x, role; } a[MAXN]; struct...

qq_41989228的博客 245

HDU 6370 Werewolf 并查集+BFS

题意 狼人游戏。狼人可能说谎,村民不会说谎。N个人每个人说一句话,“x是狼人”或者“x是村民”。 求一定是村民的人的数量,一定是狼人的人的数量。 题解 因为狼人可以不说谎,即狼人可以伪装成村民,故不存在一定是村民的人。 然后,如果A说B是村民,B说A是狼人,那么A一定是狼人。 同样,如果A说B是村民,B说C是村民,C说A是狼人,那么A一定是狼人。总而言之,一个N条边的环,有N-1条村民...

EnjoyingAC的博客 379

HDU 6370 Werewolf(并查集+DFS)

Werewolf Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1386    Accepted Submission(s): 389   Problem Description "The Werewolves" is a po...

记录一些思考的过程。 573

HDU 6370 Werewolf (并查集+反向建图)*

Werewolf Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1644    Accepted Submission(s): 469   Problem Description "The Werewolves" is a p...

满月照亮的路 207

Werewolf HDU - 6370 (找规律+并查集+bfs)

"The Werewolves" is a popular card game among young people.In the basic game, there are 2 different groups: the werewolves and the villagers.  Each player will debate a player they think is a werewolf...

untilyouydc 505

HDU 6370 Werewolf

题目:HDU 6370 Werewolf 题意: 一群人玩狼杀,但是只有两种身份,村和狼,然后分别指认别人的身份 村一定说真话,而狼可以说真话说假话,最后问有几个人一定是村,有几个人一定是铁狼 思路: 先是铁村的个数,假设所有人都是狼,显然这个情况是合法的,所以铁村的个数是0,重点就是铁狼的个数 把评价当成边,先忽略狼边,建立一条有向的村边,用村边建图就会有很多个联通块...

weixin_38287798的博客 296

HDU 6370 Werewolf(并查集+dfs) 18年暑假多校赛第六场

讲解博客:http://www.cnblogs.com/curieorz/p/9447454.html 题意:村民只能说真话,狼人“可以”撒谎,每个人说一句话指向出自己之外任意一人身份,问与多少村民和狼人。 思路:1.因为可以有全狼的情况,所以不存在一定是村民的情况。            2.通过基环树找狼。(具体参见下图,搬运于别人的博客QAQ。。。)       当我们发现有连...

恒持此志成永志 283

2018 Multi-University Training Contest 6--HDU 6370 Werewolf(dfs+并查集)

题意: 两种角色:狼和村民;狼的话可真可假,村民的话一定为真。找出铁狼和人的数量。 题解: 因为狼会说谎,所以人的个数是无法确定的。又因为人是说真话,如果他说A是狼,则A一定是狼。 那么我们就可以得到:A说B是人,B说C是人,C说B是狼,这样我们就可以知道B和A一定是狼,因为如果C是狼则全都没有意义,所以C不是狼,那么他说了真话,则B是狼,这时候A说了假话,那他也一定是狼。 #in...

yanhu6955的博客 252

2018/8/9 MultiU 6 并查集+dfs,反向建边提高查询效率 !!! / 最大字段和n维(降维)/ 状压+中途相遇法...

hdu6370 Werewolf http://acm.hdu.edu.cn/showproblem.php?pid=6370 题意:村民只能说真话,狼人“可以”撒谎,每个人说一句话指向出自己之外任意一人身份,问与多少铁民和铁狼。 思路:1.因为可以有全狼的情况,所以不存在铁民。 2.通过基环树找狼。(具体参见下图,搬运于别人的博客QAQ。。。) ...

weixin_33830216的博客 161

2018 Multi-University Training Contest 6 1009 (HDU6370) Werewolf 拓扑判环(基环树)

HDU6370 Werewolf Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 662 Accepted Submission(s): 155 Problem Description “The Werewolves” ...

点滴 290
上一篇: HDU 6386 Age of Moyu 【BFS + 优先队列优化】
下一篇: 莫比乌斯反演μ函数模板
莜莫oO
博客等级 码龄9年 7粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值