题解:SP11375 RPLE - Espionage
__CrossBow_EXE__ · · 题解
前言
水题,但坑不少。
题解
思路很简单,把所有监视的人和被监视的人都记录下来,再看看每个被监视的人有没有被监视过即可。
但这题坑很多,我就踩过这些:
- 不能边读入边处理!先读入完再处理!
- 输出的格式中还要输出第几组数据!
- 每组数据都要初始化!
话不多说,上代码。
代码
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
int T;
bool is_spy[10005];
int u[10005],v[10005];//监视的人,被监视的人
void yes(int x){
cout<<"Scenario #"<<x<<": spying"<<endl;
}
void no(int x){
cout<<"Scenario #"<<x<<": spied"<<endl;
}
void solve(int x){
bool flag=0;//初始化标记
int n,r;
memset(is_spy,0,sizeof(is_spy));//初始化
cin>>n>>r;
for(int i=1;i<=r;i++){
cin>>u[i]>>v[i];//u[i]在监视v[i]
is_spy[u[i]]=1;//u[i]监视别人,说明他是间谍
}
for(int i=1;i<=r;i++){
if(is_spy[v[i]]){//有一次监视中,被监视的人是间谍
flag=1;//标记:有间谍被监视了
break;//这里可以break
}
}
if(flag) no(x);//互相监视
else yes(x); //没有互相监视
return;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>T;
for(int i=1;i<=T;i++){//第i组数据
solve(i);
}
return 0;
}