比赛 |
聪明的工作员 |
评测结果 |
WWWEWWWEWWWW |
题目名称 |
聪明的推销员 |
最终得分 |
0 |
用户昵称 |
皓芷 |
运行时间 |
0.169 s |
代码语言 |
C++ |
内存使用 |
0.41 MiB |
提交时间 |
2017-03-21 19:39:24 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;
int n,p,g,per[3010]={0},t[3010],r,a,b;
vector<int>fa[3010];
vector<int>son[3010];
int is_huan(int i,int *zg)
{
int a=20010;
for(int j=0;j<son[i].size();j++)
if(zg[son[i][j]]==0)
{
zg[son[i][j]]=1;
a=min(is_huan(son[i][j],zg),t[i]);
}
if(zg[i]==1)
{
return a;
}
}
void findson(int i,int *zg)
{
if(!son[i].empty())
for(int j=0;1<son[i].size();j++)
if(zg[son[i][j]]==0)
{
findson(son[i][j],zg);
zg[son[i][j]]=1;
}
}
int ifyes()
{
int ans=0,zg[3010]={0};
for(int i=1;i<=n;i++)
{
if(fa[i].empty())
{
ans+=t[i];
zg[i]=1;
findson(i,zg);
}
}
for(int i=1;i<=n;i++)
{
if(zg[i]==0)
{
ans+=is_huan(i,zg);
}
}
return ans;
}
int findunper(int i,int a)
{
for(int j=0;j<son[i].size();j++)
if(!per[son[i][j]])
{
a=min(son[i][j],i);
a=findunper(son[i][j],a);
}
return a;
}
void ifno()
{
int k=1,ans=3010;
for(int i=1;i<=n;i++)
{
if(fa[i].empty()&&per[i]==0)
{
ans=min(ans,findunper(i,3010));
k=0;
}
}
if(k==0)
{
printf("NO\n%d",ans);
return;
}
printf("YES\n%d",ifyes());
}
int main()
{
freopen("salenet.in","r",stdin);
freopen("salenet.out","w",stdout);
scanf("%d%d",&n,&p);
for(int i=0;i<=n;i++)
t[i]=20010;
for(int i=1;i<=p;i++)
{
scanf("%d",&g);
per[g]=1;
scanf("%d",&t[g]);
printf("%d\n",t[g]);
}
scanf("%d",&r);
for(int i=1;i<=r;i++)
{
scanf("%d%d",&a,&b);
fa[b].push_back(a);
son[a].push_back(b);
}
ifno();
return 0;
}