题解:SP11375 RPLE - Espionage

· · 题解

前言

水题,但坑不少。

题解

思路很简单,把所有监视的人和被监视的人都记录下来,再看看每个被监视的人有没有被监视过即可。

但这题坑很多,我就踩过这些:

话不多说,上代码。

代码

#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;
}