记录编号 113258 评测结果 AAWWWAWWW
题目名称 工程规划 最终得分 33
用户昵称 Gravatarfeng 是否通过 未通过
代码语言 C++ 运行时间 0.007 s
提交时间 2014-07-20 16:03:15 内存使用 5.15 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. using namespace std;
  6. struct node{
  7. int x,nex;
  8. }a[1100];
  9. struct edge{
  10. int x,y,v,nex;
  11. }e[41000];
  12. bool f[1100];
  13. int p,n,X,Y,m;
  14. int dist[1100];
  15. int queue[1100000];
  16.  
  17.  
  18. void add(int x,int y,int v)
  19. {
  20. p++;
  21. e[p].nex=a[x].nex;
  22. e[p].x=x;
  23. e[p].v=v;
  24. e[p].y=y;
  25. a[x].nex=p;
  26. }
  27. bool spfa()
  28. {
  29. for (int i=1;i<=n;i++)
  30. dist[i]=100000000;
  31. dist[0]=0;
  32. memset(f,false,sizeof(f));
  33. f[0]=true;
  34. int head=0;
  35. int tail=0;
  36. queue[++tail]=0;
  37. while(head<tail)
  38. {
  39. int x=queue[++head];
  40. f[x]=false;
  41. int t=a[x].nex;
  42. while (t)
  43. {
  44. if (dist[x]+e[t].v>dist[e[t].y] || dist[e[t].y]==100000000)
  45. {
  46. dist[e[t].y]=e[t].v+dist[x];
  47. if (!f[e[t].y])
  48. {
  49. queue[++tail]=e[t].y;
  50. f[e[t].y]=true;
  51. }
  52. }
  53. t=e[t].nex;
  54. }
  55. if (tail>=(n+p)*100) return false;
  56. }
  57. return true;
  58. }
  59. int main()
  60. {
  61. freopen("work.in","r",stdin);
  62. freopen("work.out","w",stdout);
  63. scanf("%d%d",&n,&m);
  64. int x,y,v;
  65. for (int i=1;i<=m;i++)
  66. {
  67. scanf("%d%d%d",&x,&y,&v);
  68. add(x,y,-v);
  69. }
  70. for (int i=1;i<=n;i++)
  71. add(0,i,0);
  72. // for (int i=2;i<=n;i++)
  73. // add(i,i-1,0);
  74. if (spfa())
  75. {
  76. // spfa();
  77. int MAXN=-100000000;
  78. int MINN=100000000;
  79. // for (int i=1;i<=n;i++)
  80. // if (dist[i]==100000000)dist[i]=0;
  81. for (int i=1;i<=n;i++)
  82. {
  83. if(dist[i]>MAXN)MAXN=dist[i];
  84. if(dist[i]<MINN)MINN=dist[i];
  85. }
  86. for (int i=1;i<=n;i++)
  87. printf("%d\n",dist[i]-MINN);
  88. }
  89. else
  90. {
  91. printf("NO SOLUTION\n");
  92. }
  93. return 0;
  94. }