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 1≤N,M≤10。
对于 100 % 100\% 100% 的数据, 1 ≤ N , M ≤ 1 0 5 1 \le N,M \le 10^5 1≤N,M≤105, 1 ≤ X i , Y i ≤ N 1 \le X_i,Y_i \le N 1≤Xi,Yi≤N, 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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容