蒟蒻求调 77pts
  • 板块P1262 间谍网络
  • 楼主dk_qwq
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/28 10:03
  • 上次更新2023/10/27 18:04:12
查看原帖
蒟蒻求调 77pts
311306
dk_qwq楼主2022/7/28 10:03

测评记录 WA掉 #4 #6 #7 都是 read N, expected Y

// Problem: P1262 间谍网络
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1262
// Memory Limit: 125 MB
// Time Limit: 1000 ms

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
const int N=3e3+5;
vector<int>e[N];
void add(int u,int v){
	e[u].push_back(v);
}
int w[N];
int n,m,p;
int dfn[N],low[N],inde;
int color[N];
bool vis[N];
stack<int>s;
void tarjan(int u){
	dfn[u]=low[u]=++inde;
	vis[u]=1;s.push(u);
	for(auto v:e[u]){
		if(!dfn[u]){
			tarjan(v);
			low[u]=min(low[u],low[v]);
		}
		else if(vis[v]) low[u]=min(low[u],dfn[v]);
	}
	if(dfn[u]==low[u]){
		while(!s.empty()){
			int v=s.top();
			s.pop();
			color[v]=u;
			vis[v]=0;
			w[u]=min(w[u],w[v]);
			if(v==u) break;
		}
	}
}
vector<int>G[N];
int ru[N];
void add_G(int u,int v){
	G[u].push_back(v);
	ru[v]++;
}
queue<int>q;
void bfs(int s){
	q.push(s);
	vis[s]=1;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(auto v:G[u]){
			if(!vis[v]){
				vis[v]=1;
				q.push(v);
			}
		}
	}
}
void toposort(){
	memset(vis,0,sizeof(vis));
	int ans=0;
	for(int i=1;i<=n;i++)
		if(ru[i]==0&&color[i]==i&&w[i]!=0x3f3f3f3f) q.push(i),vis[i]=1,ans+=w[i];
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(auto v:G[u]){
			if(!vis[v]){
				vis[v]=1;
				q.push(v);
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(!vis[color[i]]){
			if(w[color[i]]!=0x3f3f3f3f){
				ans+=w[color[i]];
				bfs(color[i]);
				continue;
			}
			printf("NO\n%d",color[i]);
			return ;
		}
	}
	printf("YES\n%d",ans);
}
int main()
{
	memset(w,0x3f3f3f3f,sizeof(w));
	scanf("%d%d",&n,&p);
	while(p--){
		int i,ww;
		scanf("%d%d",&i,&ww);
		w[i]=ww;
	}
	scanf("%d",&m);
	while(m--){
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v);
	}
	for(int i=1;i<=n;i++)
		if(!dfn[i]) tarjan(i);
	for(int u=1;u<=n;u++){
		for(auto v:e[u]){
			if(color[u]!=color[v]){
				add_G(color[u],color[v]);
			}
		}
	}
	toposort();
}
2022/7/28 10:03
加载中...