| ||||||||||
| 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 | |||||||||
有大神愿意看看这段代码么?奇怪的错误。。#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
#define ll long long
const int MAXN = 50005;
const int MAXM = 100005;
const ll INF = ((ll)1)<<62;
inline int max(int a, int b) { return a > b ? a : b; }
inline int min(int a, int b) { return a < b ? a : b; }
inline double max(double a, double b) { return a > b ? a : b; }
inline double min(double a, double b) { return a < b ? a : b; }
int wn[MAXN], first[MAXN];
int v[MAXM], nxt[MAXM], we[MAXM];
bool inq[MAXN];
ll d[MAXN];
int main()
{
//freopen("poj3013.in", "r", stdin);
int t;
scanf("%d", &t);
while(t--)
{
int n, m;
int i, j;
scanf("%d%d", &n, &m);
for(i = 1; i <= n; i++) scanf("%d", &wn[i]);
for(i = 1; i <= n; i++) first[i] = -1;
int cnt = 0;
for(i = 0; i < m; i++)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
v[cnt] = b; we[cnt] = c;
nxt[cnt] = first[a];
first[a] = cnt++;
v[cnt] = a; we[cnt] = c;
nxt[cnt] = first[b];
first[b] = cnt++;
}
for(i = 1; i <= n; i++) { d[i] = INF; inq[i] = false; }
d[1] = 0;
queue<int> q;
q.push(1);
inq[1] = true;
while(!q.empty())
{
int x = q.front(); q.pop();
inq[x] = false;
for(int e = first[x]; e != -1; e = nxt[e]) if(d[v[e]] > d[x] + we[e])
{
d[v[e]] = d[x] + we[e];
if(!inq[v[e]])
{
inq[v[e]] = true;
q.push(v[e]);
}
}
}
bool exist = true;
ll sum = 0;
for(i = 2; i <= n; i++)
if(d[i] > -1) sum += d[i]*wn[i];
else{ exist = false; break; }
if(exist) printf("%lld\n", sum);
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