标签:
6 6
1 2 1
1 4 3
2 3 1
2 5 2
4 6 2
5 3 2
0
0
0
1 3
0
2 3 5
5
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
int n,m,x,y,z,k,mind,num,map[3001][3001],dis[3001],pro[3001][3001],pr[3001];
bool v[3001];
int main()
{
scanf("%d%d",&n,&m);
for (int i=0;i<=n;i++)
for (int j=0;j<=n;j++)
map[i][j]=1000000007;
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
map[x][y]=z;
}
memset(pro,0,sizeof(pro));
memset(pr,0,sizeof(pr));
for (int i=1;i<=n;i++)
{
scanf("%d",&pr[i]);
if (pr[i]==0) continue;
for (int j=1;j<=pr[i];j++)
{
scanf("%d",&x);
pro[x][i]=true;
}
}
for (int i=0;i<=n;i++) dis[i]=100000007;
dis[1]=0;
memset(v,0,sizeof(v));
for (int i=1;i<n;i++)
{
k=0;
for (int j=1;j<=n;j++)
if (!pr[j]&&!v[j]&&dis[j]<dis[k]) k=j;
if (k==n) break;
v[k]=true;
for (int j=1;j<=n;j++)
if (dis[k]+map[k][j]<dis[j]) dis[j]=dis[k]+map[k][j];
for (int j=1;j<=n;j++)
if (pro[k][j])
{
pr[j]--;
dis[j]=max(dis[j],dis[k]);
}
}
printf("%d",dis[n]);
return 0;
}
#0: Wrong Answer (0ms, 71284KiB)
第1行与答案输出不匹配
答案输出:
927选手输出:
1738
#5: Wrong Answer (62ms, 71284KiB)
第1行与答案输出不匹配
答案输出:
4844选手输出:
4910
只得了80‘,不知哪里出现了问题,望各路大神指教。
[SDOI2010][TYVJ P1736] 大陆争霸[80']
标签:
原文地址:http://www.cnblogs.com/ws-fqk/p/4392371.html