记录编号 408342 评测结果 AAAAAAAAAAAA
题目名称 聪明的推销员 最终得分 100
用户昵称 GravatarCSU_Turkey 是否通过 通过
代码语言 C++ 运行时间 0.017 s
提交时间 2017-05-24 15:10:27 内存使用 0.46 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int max_n=3005;
int n,p,x,iinn[max_n],y,t[max_n],t1[max_n],r,inn[max_n],scc[max_n],scc_cnt,scc_time,pre[max_n],low[max_n];
vector<int>a[max_n];
vector<int>ne[max_n];
stack<int>S;
inline int read()
{
	char ch;
	int a=0;
	ch=getchar();
	while(!('0'<=ch&&'9'>=ch))
	ch=getchar();
	while('0'<=ch&&'9'>=ch)
	a=a*10+ch-'0',
	ch=getchar();
	return a;
}
inline void dfs(int x)
{
	pre[x]=low[x]=++scc_time;
	S.push(x);
	for(int i=0;i<a[x].size();i++)
	{
		int u=a[x][i];
		if(!pre[u])dfs(u),low[x]=min(low[x],low[u]);
		else if(!scc[u])low[x]=min(low[x],pre[u]);
	}
	if(low[x]==pre[x])
	{
		scc_cnt++;
	for(;;)
	{
		int v=S.top();
		S.pop();
		scc[v]=scc_cnt;
		if(v==x)break;
	}
}
}
inline void tar_suo()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<a[i].size();j++)
		{
			int u=a[i][j];
			if(scc[u]!=scc[i])
			ne[scc[i]].push_back(scc[u]),
			inn[scc[u]]++;
		}
	}
}
int main()
{
	freopen("salenet.in","r",stdin);
	freopen("salenet.out","w",stdout);
	n=read();
	p=read();
	for(int i=1;i<=p;i++)
	{
		x=read();
		t[x]=read();
	}
	r=read();
	for(int i=1;i<=r;i++)
	{
		x=read();
		y=read();
		a[x].push_back(y);
		iinn[y]++;
	}
	for(int i=1;i<=n;i++)
	if(!pre[i])dfs(i);
	tar_suo();
	int cnt=0,book=0;
	for(int i=1;i<=scc_cnt;i++)
	{
	if(iinn[i]==0)cnt++;
	if(iinn[i]==0&&!t[i])book=1;
	}
	memset(t1,0x7f,sizeof(t1));
	for(int i=1;i<=n;i++)
	if(t[i])t1[scc[i]]=min(t1[scc[i]],t[i]);
	if(cnt<=p&&!book)
	{
		int ans=0;
		cout<<"YES";
		for(int i=1;i<=scc_cnt;i++)
		if(inn[i]==0)ans+=t1[i];
		cout<<ans;
	}
	else 
	{
		cout<<"NO";
		int k=0;
		for(int i=1;i<=n;i++)
	{	
	if(iinn[i]==0&&!t[i])
	{
		cout<<i;
		break;
	}
		}
	}
	return 0;
}