Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
有没有哪位大神愿意看一下这段代码哪里有问题啊?wa到吐……不胜感激#include<iostream> #include<stdio.h> #include<string.h> #include<queue> using namespace std; #define inf 10000000000000 #define maxn 50005 struct EDGE{ int end; int weight; int next; }edge[maxn*2]; int head[maxn*2]; int price[maxn]; long long dis[maxn]; bool vis[maxn]; int e,v; void spfa(){ queue <int> q; memset(vis,0,sizeof(vis)); for(int i=0 ; i<=e ; i++) dis[i]=inf; dis[1]=0; vis[1]=true; q.push(1); while(!q.empty()){ int now=q.front(); q.pop(); vis[now]=true; for(int i=head[now] ; i ; i=edge[i].next) if(dis[edge[i].end] > dis[now] + edge[i].weight){ dis[edge[i].end] = dis[now] + edge[i].weight; if(!vis[edge[i].end]){ vis[edge[i].end]=true; q.push(edge[i].end); } } } } int main(){ int test; scanf("%d",&test); while(test--){ int a,b,w; scanf("%d%d",&e,&v); memset(price,0,sizeof(price)); memset(head,0,sizeof(head)); for(int i=1 ; i<=e ; i++) scanf("%d",&price[i]); int cnt=1; for(int i=0 ; i<v ; i++){ scanf("%d%d%d",&a,&b,&w); edge[cnt].end=b; edge[cnt].weight=w; edge[cnt].next=head[a]; head[a]=cnt++; edge[cnt].end=a; edge[cnt].weight=w; edge[cnt].next=head[b]; head[b]=cnt++; } if(e==0||e==1) { printf("0\n"); continue; } spfa(); bool flag=true; long long res=0; for(int i=2 ; i<=e ; i++){ if(dis[i]==inf){ flag=false; break; } res += price[i]*dis[i]; } if(flag) printf("%lld\n",res); else printf("No Answer\n"); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator