这道题是一道拓扑排序题,我们只要看环里面有多少个摄像头成环儿了就行
当然,本题是给的位置,不是所有位置都有摄像头,我们只要摄像头的位置,
#include <iostream>
#include <queue>
#include <vector>
const int N = 510;
int n;
bool st[N];//标记某个位置是不是摄像头
int in[N];
using namespace std;
vector<int> edges[N];
queue <int> q;
int main()
{
cin >> n;
for(int i = 1;i<=n;i++)
{
int x,y,z;cin >> x >> y;
st[x] = true;
while(y--)
{
cin >> z;
edges[x].push_back(z);
in[z]++;
}
}
for(int i =0;i<=500;i++)
{
if(in[i]==0&&st[i]) q.push(i);
}
while(q.size())
{
int t = q.front();q.pop();
for(auto &e : edges[t])
{
in[e]--;
if(st[e] && in[e]==0)
{
q.push(e);
}
}
}
int ret = 0;
for(int i = 0;i<=500;i++)
{
if(in[i]!=0 && st[i]) ret++;
}
if(!ret) cout << "YES" << endl;
else cout << ret << endl;
}