记录编号 |
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;
-
- }