💟这里是CS大白话专场,让枯燥的学习变得有趣!
💟没有对象不要怕,我们new一个出来,每天对ta说不尽情话!
💟好记性不如烂键盘,自己总结不如收藏别人!
💌 N个人编号1~N,其中有一个人为预言家,满足以下两个条件:
🍠 所有人都相信预言家。
🍠 预言家不相信任何人。
给出一组数组trust[i] = {ai,bi},代表ai相信bi,ai不等于bi,0<ai<=1000。若有预言家,输出预言家编号。
输入:
5
1 3
2 3
4 3
5 3
输出:
3
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
int ai,bi,pro;
vector<int> every(n+1);
int isPro=1;
cin >> n;
if(n==1) return 0; //如果只有一个人无法同时满足1、2条件
cin >> ai >> bi;
every[ai]=1;
pro = bi; //假设第一个人信任的为预言家
while(cin >> ai){
cin >> bi;
every[ai]=1;
//其他人信任的不是预言家或者预言家信任了其他人
if(bi!=pro||ai==pro){
isPro = 0;
break;
}
}
if(isPro==1){
//判断是否所有人都信任了预言家
for(int i=1;i<=n;i++){
if(i!=pro&&every[i]==0){
isPro=0;
break;
}
}
}
//满足1、2条件返回预言家编号
if(isPro==1) cout << pro;
return 0;
}