社区讨论

WA on #6 求调

P1262间谍网络参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mllyodgs
此快照首次捕获于
2026/02/14 14:54
5 天前
此快照最后确认于
2026/02/17 20:20
前天
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
stack<int> st;
vector<int> g[3003],G[3003];
int n,m,p,idx,cnt,ans1=1,ans2;
int pp[3003];
int a[3003],c[3003],f[3003];
int dfn[3003],low[3003],ind[3003];
int ins[3003],scc[3003],res[3003];
vector<int> sccc[3003];
void dfs(int u) {
	dfn[u]=low[u]=++idx;
	ins[u]=1;
	st.push(u);
	for(auto v:g[u]) {
		if(!dfn[v]) {
			dfs(v);
			low[u]=min(low[u],low[v]);
		} else if(ins[v]) {
			low[u]=min(low[u],dfn[v]);
		}
	}
	if(dfn[u]==low[u]) {
		cnt++;
		while(1) {
			int t=st.top();
			st.pop();
			scc[t]=cnt;
			ins[t]=0;
			sccc[cnt].push_back(t);
			if(t==u)break;
		}
		sort(sccc[cnt].begin(),sccc[cnt].end());
	}
}
signed main() {
	cin>>n>>p;
	for(int i=1; i<=p; i++) {
		int id;
		cin>>id;
		c[id]=1;
		cin>>a[id];
	}
	cin>>m;
	for(int i=1; i<=m; i++) {
		int u,v;
		cin>>u>>v;
		g[u].push_back(v);
	}
	for(int i=1; i<=n; i++) {
		if(!dfn[i]) {
			dfs(i);
		}
		pp[i]=1e9;
	}
	for(int u=1; u<=n; u++) {
		for(auto v:g[u]) {
			if(scc[u]!=scc[v]) {
				G[scc[u]].push_back(scc[v]);
				ind[scc[v]]++;
			}
		}
		if(c[u]) {
			pp[scc[u]]=min(pp[scc[u]],a[u]);
		}

	}
	for(int i=1; i<=cnt; i++) {
		if(ind[i]==0) {
			if(pp[i]==1e9) {
				ans1=0;
			} else {
				ans2+=pp[i];
			}
		}
	}
	if(ans1) {
		cout<<"YES\n"<<ans2;
	} else {
		cout<<"NO\n";
		queue<int> q;
		for(int i=1; i<=cnt; i++) {
			if(ind[i]==0&&pp[i]!=1e9) {
				f[i]=1;
				q.push(i);
			}
		}
	
		while(q.size()){
			int u=q.front();
			q.pop();
			for(auto v:G[u]){
				f[v]=1;
				ind[v]--;
				if(ind[v]==0){
					q.push(v);
				}
			}
		}
		for(int i=1;i<=cnt;i++){
			if(f[i]){
				for(auto j:sccc[i]){
					res[j]=1;
				}
			}
		}
		for(int i=1;i<=n;i++){
			if(res[i]==0){
				cout<<i;
				return 0;

			}
		}
	}
}

回复

1 条回复,欢迎继续交流。

正在加载回复...