85分求助
查看原帖
85分求助
554574
gyyyyx楼主2022/12/11 12:31

WA #11 #16 #19

#include<bits/stdc++.h>
#define N 5005
using namespace std;
inline int read(){
	int x(0),f(1);char c(getchar());
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
	return x*f;
}
void write(int x){
	if(x>9) write(x/10);
	putchar(x%10^48);
}
void write(int x,char ch){
	if(x<0) putchar('-'),x=-x;
	write(x);putchar(ch);
}
int n,k,p,r,v,s,u,IN[N];
int head[N],nxt[N*N],to[N*N],cnt;
inline void add(int x,int y){
	to[++cnt]=y;
	nxt[cnt]=head[x];
	head[x]=cnt;
}
queue <int> q;
int f[N];
int main(){
	n=read();k=read();p=read();
	for(int i(1);i<=p;++i) IN[read()]=-1;
	r=read();
	for(int i(1);i<=r;++i){
		v=read();s=read();
		for(int j(1);j<=s;++j){
			u=read();
			if(~IN[v]) add(u,v);
		}
		if(~IN[v]) IN[v]+=s;
	}
	memset(f,-1,sizeof(f));
	for(int i(1);i<=n;++i){
		if(~IN[i]) continue;
		IN[i]=0;f[i]=0;q.push(i);
	}
	while(!q.empty()){
		int x(q.front());q.pop();
		for(int i(head[x]);i;i=nxt[i]){
			int y(to[i]);--IN[y];
			if(!IN[y]){f[y]=f[x]+1;q.push(y);}
		}
	}
	write(f[k],'\n');
	return 0;
}
2022/12/11 12:31
加载中...