大家好,又见面了,我是你们的朋友全栈君。
题意:在给定有向图中,对于给定查询序列是否是有向图中的一个拓扑序列,记录非法序列下标
tip:模拟拓扑排序
#include<iostream>
#include<vector>
using namespace std;
int in_num[1003]= {0};
int temp[1003]= {0};
vector<int> s[1003];
int checked(int x) {
if(temp[x])
return 1;
for(int i=0; i<s[x].size(); ++i)
temp[s[x][i]]--;//去边
return 0;
}
int main() {
int n,m;
cin>>n>>m;
for(int i=0; i<m; ++i) {
int a,b;
cin>>a>>b;
in_num[b]++;//记录b点入度
s[a].push_back(b);//记录a的出边
}
int k;
cin>>k;
vector<int>ans;
for(int i=0; i<k; ++i) {
int flag=0;
for(int l=1; l<=n; ++l)
temp[l]=in_num[l];
for(int j=0; j<n; ++j) {
int a;
cin>>a;
if(checked(a))
flag=1;//只要有一点不符合入度为零,就为不合法
}
if(flag)
ans.push_back(i);
}
cout<<ans[0];
for(int i=1; i<ans.size(); ++i)
cout<<" "<<ans[i];
return 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136498.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...