打卡信奥刷题(1620)用C++实现信奥 P7370 [COCI 2018/2019 #4] Wand

P7370 [COCI 2018/2019 #4] Wand

题目背景

Kile 看到了 Nikola 的题目之后有了灵感,便创作出了自己的版本。

题目描述

N N N 位分别用 1 , 2 , ⋯   , N 1,2,\cdots,N 1,2,,N 表示的巫师将参与 M M M 次决斗。

现有一个魔杖。如果魔杖目前归属于巫师 A,而巫师 A 被巫师 B 击败,则魔杖将归属于巫师 B。魔杖最初归属于巫师 1 1 1

Kile 想知道,在只调整决斗的顺序的条件之下,魔杖最终可能会归属于谁。

输入格式

第一行输入正整数 N , M N,M N,M

接下来的 M M M 行输入正整数 X i , Y i X_i,Y_i Xi,Yi,表示巫师 X i X_i Xi 将击败巫师 Y i Y_i Yi

输出格式

输出 N N N 个字符,其中若魔杖最终可能归属于巫师 k k k,则在第 k k k 个字符处输出 1 1 1,否则在此处输出 0 0 0

输入输出样例 #1

输入 #1

3 2
2 3
3 1

输出 #1

011

输入输出样例 #2

输入 #2

2 2
2 1
1 2

输出 #2

11

输入输出样例 #3

输入 #3

5 5
3 1
2 1
4 3
4 5
2 5

输出 #3

01110

说明/提示

样例 1 解释

如果巫师 1 , 3 1,3 1,3 先进行决斗,然后轮到巫师 2 , 3 2,3 2,3,魔杖将最终归属于巫师 2 2 2

如果巫师 2 , 3 2,3 2,3 先进行决斗,然后轮到巫师 1 , 3 1,3 1,3,魔杖将最终归属于巫师 3 3 3

数据规模与约定

对于 20 % 20\% 20% 的数据, 1 ≤ N , M ≤ 10 1 \le N,M \le 10 1N,M10

对于 100 % 100\% 100% 的数据, 1 ≤ N , M ≤ 1 0 5 1 \le N,M \le 10^5 1N,M105 1 ≤ X i , Y i ≤ N 1 \le X_i,Y_i \le N 1Xi,YiN X i ≠ Y i X_i \neq Y_i Xi=Yi

说明

本题分值按 COCI 原题设置,满分 70 70 70

题目译自 COCI2018-2019 CONTEST #4 T2 Wand

C++实现

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
const int N = 100010; vector<int> e[N]; int n, m, a, ans, b; bool can[N];
void dfs(int u) {for(int v: e[u]) if(!can[v]) can[v] = 1, dfs(v);}
int main() {
	cin >> n >> m; 
	for(int i = 0; i < m; i++) 
	{cin >> a >> b; e[b].pb(a);}
	if(e[1].empty()) 
		can[1] = 1; // 特判
	dfs(1); 
	for(int i = 1; i <= n; i++) 
		cout << can[i];
	return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值