| ||||||||||
| 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 | |||||||||
谁帮DD我看一下哪里错了我靠#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
int T,i,j,n,m,a,b,d;
unsigned long long dijk[50010],ans,v[50010];
bool used[50010],r;
struct point
{
int pa,dist;
point *next;
}p,*pi;
point tu[50010];
priority_queue<point>que;
bool operator<(point p1,point p2)
{
return (dijk[p1.pa]>dijk[p2.pa]);
}
int main()
{
freopen("in.txt","r",stdin);
scanf("%d",&T);
while (T--)
{
while (!que.empty()) que.pop();
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%llu",&v[i]);
for(i=0;i<n;i++)
{
tu[i].pa=tu[i].dist=0;
tu[i].next=NULL;
}
while (m--)
{
scanf("%d%d%d",&a,&b,&d);
a--;b--;
pi=new point;
pi->next=tu[a].next;
pi->pa=b;
pi->dist=d;
tu[a].next=pi;
pi=new point;
pi->next=tu[b].next;
pi->pa=a;
pi->dist=d;
tu[b].next=pi;
}
for(i=0;i<n;i++) dijk[i]=1000000000000;
memset(used,false,sizeof(used));
dijk[0]=0;p.pa=0;p.dist=0;
que.push(p);
while (!que.empty())
{
p=que.top();
que.pop();
if (used[p.pa]) continue;
used[p.pa]=true;
pi=tu[p.pa].next;
while (pi)
{
if (!used[pi->pa]&&dijk[pi->pa]>dijk[p.pa]+pi->dist)
{
dijk[pi->pa]=dijk[p.pa]+pi->dist;
que.push(*pi);
}
pi=pi->next;
}
}
ans=0;
r=true;
for(i=0;i<n;i++)
if (dijk[i]==1000000000000)
{
r=false;break;
}
else ans+=dijk[i]*v[i];
if (r) printf("%llu\n",ans);
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