标签:
把我坑到死的题
开始开题以为是全图连通是的最小值 ,以为是最小生成树,然后敲了发现不是,看了下别人的题意,然后懂了;
然后发现数据大,要用邻接表就去学了一下邻接表,然后又去学了下优先队列优化的dij;
这坑爹的题目我交了10几遍,也不知道错在哪里;后来知道了maxint要#define Maxint 10000000000;
然后long int 是过不了的,改成long long才能过 ,真是呵呵啊;
1 #include<stdio.h> 2 #include<string.h> 3 #include<queue> 4 using namespace std; 5 #define Maxint 10000000000 6 7 struct node 8 { 9 long long v;//后面点 10 long long w;//权 11 long long next;//记录同一起点的下一条边的位置 12 }edge[200005]; 13 14 long long n,m,index,nodeval[53003],dis[53003],vis[53003]; 15 16 long long pre[53003];//开始的顶点 17 18 void add(long long x,long long y,long long z) 19 { 20 edge[index].v=y; 21 edge[index].w=z; 22 edge[index].next=pre[x]; 23 pre[x]=index++; 24 25 /*edge[index].v=x; 26 edge[index].w=z; 27 edge[index].next=pre[y]; 28 pre[y]=index++;*/ 29 30 } 31 32 struct Node 33 { 34 long long point,dist; 35 bool operator<(const Node x) const 36 { 37 return x.dist<dist; 38 } 39 }; 40 41 void dij(int s) 42 { 43 priority_queue<Node> q; 44 long long i,j; 45 for(i=1;i<=n;i++) 46 { 47 dis[i]=Maxint; 48 } 49 dis[1]=0; 50 Node cur; 51 cur.point=1; 52 cur.dist=0; 53 q.push(cur); 54 while(!q.empty()) 55 { 56 Node tmp; 57 tmp=q.top(); 58 q.pop(); 59 long int u=tmp.point; 60 if(vis[u]) 61 continue; 62 vis[u]=1; 63 for(j=pre[u];j!=-1;j=edge[j].next) 64 { 65 if(!vis[edge[j].v]&&dis[edge[j].v]>dis[u]+edge[j].w) 66 { 67 dis[edge[j].v]=dis[u]+edge[j].w; 68 cur.dist=dis[edge[j].v]; 69 cur.point=edge[j].v; 70 q.push(cur); 71 } 72 } 73 } 74 } 75 76 int main() 77 { 78 int i,j,t; 79 scanf("%d",&t); 80 while(t--) 81 { 82 scanf("%lld %lld",&n,&m); 83 for(i=1;i<=n;i++) 84 scanf("%ld",&nodeval[i]); 85 index=1; 86 memset(vis,0,sizeof(vis)); 87 memset(pre,-1,sizeof(pre)); 88 for(i=0;i<m;i++) 89 { 90 long long x,y,z; 91 scanf("%lld %lld %lld",&x,&y,&z); 92 if(x==y)continue; 93 add(x,y,z); 94 add(y,x,z); 95 } 96 dij(1); 97 long long ans=0,flag=0; 98 for(i=1;i<=n;i++) 99 { 100 if(dis[i]==Maxint) 101 { 102 flag=1;break; 103 } 104 ans+=(dis[i]*nodeval[i]); 105 } 106 if(flag)printf("No Answer\n"); 107 else printf("%lld\n",ans); 108 } 109 }
标签:
原文地址:http://www.cnblogs.com/sweat123/p/4478225.html