| ||||||||||
| 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 | |||||||||
求大神帮忙看看思路有什么问题???Orz我是把计算的过程直接放在最短路算法中了,拿出来另外计算就是AC的。。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <ctype.h>
#include <vector>
#include <algorithm>
#include <set>
#include <utility>
#include <stack>
#include <queue>
#include <sstream>
#include <cmath>
#include <time.h>
#include <map>
using namespace std;
#define rep(i,n) for(int i=0; i<n; i++)
#define repe(i,n) for(int i=1; i<=n; i++)
#define mst(A,k) memset(A,k,sizeof(A))
typedef long long ll;
typedef pair<int,int> Point;
const double eps = 1e-8;
const double INF = 1e15;
const int N = 605;
const int M = 600000;
struct Node{
int u;
int t;
Node(){}
Node(int u,int t):u(u),t(t){}
bool operator<(const Node& a)const
{
return t > a.t;
}
};
int n,m;
int fst[N],nxt[M],v[M],w[M],tol;
int vis[N];
int d[N];
int S = 1;
int l,r;
double ans;
void init()
{
tol = 0;
mst(fst,-1);
}
void edge(int a,int b,int c)
{
v[tol] = b;
w[tol] = c;
nxt[tol] = fst[a];
fst[a] = tol++;
}
void bfs()
{
mst(vis,0);
repe(i,n) d[i] = INF;
priority_queue<Node> Q;
Q.push(Node(S,0));
d[S] = 0;
Node p;
while(!Q.empty())
{
p = Q.top();Q.pop();
if(vis[p.u]) continue;
vis[p.u] = 1;
for(int e=fst[p.u]; ~e; e=nxt[e])
{
if(vis[v[e]])
{
int res = (p.t + d[v[e]] + w[e]);
if(res*0.5 >= ans)
{
ans = res*0.5;
l = p.u;
r = v[e];
if(res == p.t*2) r = -1;
}
continue;
}
if(p.t + w[e] < d[v[e]])
{
d[v[e]] = p.t + w[e];
Q.push(Node(v[e],d[v[e]]));
}
}
}
}
int main()
{
int a,b,c,cas = 1;
while(~scanf("%d%d",&n,&m),n||m)
{
init();
rep(i,m)
{
scanf("%d%d%d",&a,&b,&c);
edge(a,b,c);
edge(b,a,c);
}
ans = 0;
l = 1;r = -1;
bfs();
printf("System #%d\n",cas++);
if(r == -1)
{
printf("The last domino falls after %.1f seconds, at key domino %d.\n",ans,l);
}
else
{
printf("The last domino falls after %.1f seconds, between key dominoes %d and %d.\n",ans,l,r);
}
printf("\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