记录编号 |
113258 |
评测结果 |
AAWWWAWWW |
题目名称 |
工程规划 |
最终得分 |
33 |
用户昵称 |
feng |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.007 s |
提交时间 |
2014-07-20 16:03:15 |
内存使用 |
5.15 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int x,nex;
}a[1100];
struct edge{
int x,y,v,nex;
}e[41000];
bool f[1100];
int p,n,X,Y,m;
int dist[1100];
int queue[1100000];
void add(int x,int y,int v)
{
p++;
e[p].nex=a[x].nex;
e[p].x=x;
e[p].v=v;
e[p].y=y;
a[x].nex=p;
}
bool spfa()
{
for (int i=1;i<=n;i++)
dist[i]=100000000;
dist[0]=0;
memset(f,false,sizeof(f));
f[0]=true;
int head=0;
int tail=0;
queue[++tail]=0;
while(head<tail)
{
int x=queue[++head];
f[x]=false;
int t=a[x].nex;
while (t)
{
if (dist[x]+e[t].v>dist[e[t].y] || dist[e[t].y]==100000000)
{
dist[e[t].y]=e[t].v+dist[x];
if (!f[e[t].y])
{
queue[++tail]=e[t].y;
f[e[t].y]=true;
}
}
t=e[t].nex;
}
if (tail>=(n+p)*100) return false;
}
return true;
}
int main()
{
freopen("work.in","r",stdin);
freopen("work.out","w",stdout);
scanf("%d%d",&n,&m);
int x,y,v;
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&v);
add(x,y,-v);
}
for (int i=1;i<=n;i++)
add(0,i,0);
// for (int i=2;i<=n;i++)
// add(i,i-1,0);
if (spfa())
{
// spfa();
int MAXN=-100000000;
int MINN=100000000;
// for (int i=1;i<=n;i++)
// if (dist[i]==100000000)dist[i]=0;
for (int i=1;i<=n;i++)
{
if(dist[i]>MAXN)MAXN=dist[i];
if(dist[i]<MINN)MINN=dist[i];
}
for (int i=1;i<=n;i++)
printf("%d\n",dist[i]-MINN);
}
else
{
printf("NO SOLUTION\n");
}
return 0;
}