社区讨论
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 条回复,欢迎继续交流。
正在加载回复...