| ||||||||||
| 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 | |||||||||
spfa 飘过~~#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <map>
using namespace std;
const int inf = 100000000;
const int maxn = 205;
struct node{
int v;
int w;
node(int _v, int _w){
v = _v; w = _w;
}
};
int n,m;
map<string,int> Map;
vector<node> list[maxn];
int s,t;//起点、终点
int dist[maxn];
bool inq[maxn];
bool input(){
string u,v;
int w;
int cnt = 1;
cin>>n>>m;
if(n+m == 0) return false;
//清零
for(int i = 0; i <= n; i++) list[i].clear();
Map.clear();
for(int i = 0; i < m; i++){
cin>>u>>v;
cin>>w;
if(Map[u] == 0) Map[u] = cnt++;
if(Map[v] == 0) Map[v] = cnt++;
list[Map[u]].push_back(node(Map[v],w));
list[Map[v]].push_back(node(Map[u],w));
}
string a,b;
cin>>a>>b;
s = Map[a];
t = Map[b];
return true;
}
void spfa(){
queue<int> q;
for(int i = 0; i <= n; i++){
dist[i] = -inf;
inq[i] = false;
}
dist[s] = inf;
q.push(s);
inq[s] = true;
while(!q.empty()){
int u = q.front(); q.pop(); inq[u] = false;
for(int i = 0; i < list[u].size(); i++){
int v = list[u][i].v;
int w = min(dist[u],list[u][i].w);//取上个城市和扩展边之间的最小值
if(w > dist[v]){//发现载重更大的路径
dist[v] = w;
if(!inq[v]){
q.push(v);
inq[v] = true;
}
}
}
}
}
void solve(){
static int cnt = 0;
spfa();
printf("Scenario #%d\n",++cnt);
printf("%d tons\n",dist[t]);
puts("");
}
int main(){
while(input()){
solve();
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator