zoj 2792 && poj 2472 106 miles to Chicago
2015-03-04 20:55
337 查看
题意:最短路径的变种。
思路:任意最短路径算法均可解之,将权值累加求最小值修改为权值累乘求最大值即可。
代码:
思路:任意最短路径算法均可解之,将权值累加求最小值修改为权值累乘求最大值即可。
代码:
#include <iostream> #include <cstdio> #include <vector> #include <queue> using namespace std; const int inf = 10000000; const int maxn = 105; struct node{ int v; double w; node(int _v, double _w){ v = _v; w = _w; } }; int n,m; vector<node> list[maxn]; double dist[maxn]; bool inq[maxn]; bool input(){ cin>>n; if(n == 0) return false; cin>>m; for(int i = 1; i <= n; i++) list[i].clear(); int u,v; int w; for(int i = 0; i < m; i++){ cin>>u>>v>>w; list[u].push_back(node(v,w/100.0)); list[v].push_back(node(u,w/100.0)); } return true; } void spfa(){ queue<int> q; for(int i = 1; i <= n; i++){ dist[i] = -inf; inq[i] = false; } dist[1] = 1; q.push(1); inq[1] = 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; double w = list[u][i].w; if(dist[u] * w > dist[v]){ dist[v] = dist[u] * w; if(!inq[v]){ q.push(v); inq[v] = true; } } } } } void solve(){ spfa(); printf("%.6lf percent\n",dist *100.0); } int main(){ while(input()){ solve(); } return 0; }
相关文章推荐
- POJ 2472 &&ZOJ 2797 (106 miles to Chicago)
- poj 2472 106 miles to Chicago a->b有安全概率,求i->j安全概率最大的一条路
- ZOJ 2797 POJ 2472 106 miles to Chicago
- poj 2472--106 miles to Chicago-最短路flody
- POJ 2472 106 miles to Chicago
- 【POJ】2472 106 miles to Chicago 最短路
- POJ 2472 106 miles to Chicago(Floyd)
- poj 2472 106 miles to Chicago
- POJ-2472 106 miles to Chicago
- poj 2472 106 miles to Chicago
- Poj 2472 106 miles to Chicago【Floyd】
- POJ 2472 106 miles to Chicago(Dijstra变形——史上最坑的最长路问题)
- POJ 2472 ||SDUT 2358 106 miles to Chicago(Dijkstra算法变形)
- POJ 2472 106 miles to Chicago
- poj 2472 106 miles to Chicago
- poj 2472 106 miles to Chicago
- poj 2472 106 miles to Chicago
- POJ:2472 106 miles to Chicago
- poj 2472 106 miles to Chicago floyd
- POJ 2472 106 miles to Chicago(最短路)