UVA
来源:互联网 发布:mac 升级不到10.10 编辑:程序博客网 时间:2024/06/14 05:11
由于要同时满足两个条件,优先满足温度最低,其次是距离最短。
于是按照温度建最小生成树,然后把低于最高温度的边都加进来,spfa找距离最短的路线就可以了。
#include<iostream>#include<string>#include<cstdio>#include<set>#include<stack>#include<list>#include<vector>#include<queue>#include<algorithm>#include<cstring>#include<cmath>#include<fstream>using namespace std;typedef long long ll;const int maxn = 110,maxe = 10010,INF = 0x3f3f3f3f;int n,m,st,ed;struct node{ int u,v; double tem,len; bool operator < (const node &a) const{ return tem < a.tem; }}e[maxe];int top[maxn];int find(int x){ if (x == top[x]) return x; else return top[x] = find(top[x]);}double kruskal(){ for(int i = 1;i <= n;++i) top[i] = i; int k = 0; double tem = 0; while(find(st) != find(ed)){ int u = find(e[k].u),v = find(e[k].v); tem = e[k].tem; if (u != v){ top[u] = v; } k++; } return tem;}vector<pair<int,double>> r[maxn];vector<int> path;double spfa(){ queue<int> Q; int fa[maxn] = {}; bool inQ[maxn] = {}; double d[maxn]; for(int i = 1;i <= n;++i) d[i] = INF; d[st] = 0; inQ[st] = 1; Q.push(st); while(!Q.empty()){ int u = Q.front();Q.pop(); inQ[u] = 0; for(int i = 0;i < r[u].size();++i){ int v = r[u][i].first; double len = r[u][i].second; if (d[v] > d[u] + len){ d[v] = d[u] + len; fa[v] = u; if (!inQ[v]){ Q.push(v); inQ[v] = 1; } } } } path.clear(); int x = ed; while(x != st){ path.push_back(x); x = fa[x]; } path.push_back(st); reverse(path.begin(),path.end()); return d[ed];}void init(){ for(int i = 1;i <= n;++i) r[i].clear(); cin >> st >> ed; for(int i = 0;i < m;++i) cin >> e[i].u >> e[i].v >> e[i].tem >> e[i].len; sort(e,e + m); double mxtem = kruskal(); for(int i = 0;i < m;++i){ if (e[i].tem > mxtem) continue; int u = e[i].u,v = e[i].v; double len = e[i].len; r[u].push_back({v,len}); r[v].push_back({u,len}); } double mxlen = spfa(); for(int i = 0;i < path.size();++i){ if (i) printf(" "); printf("%d",path[i]); } printf("\n%.1f %.1f\n",mxlen,mxtem);}int main(){ while(cin >> n >> m){ init(); }}
0 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- autoproxy 匹配规则
- 谈一谈如何远程访问MySQL(腾讯云,云主机)
- 【PHP】验证码Demo
- Bitmap.Config RGB_565 ARGB_8888
- Android pm命令
- UVA
- 教你一天玩转JavaScript(六)——使用JavaScript完成后台数据展示表格的隔行换色
- 解决oracle 10/11 g Express Edition不能JDBC连接的问题
- [leetcode]563. Binary Tree Tilt
- Android中的Application简
- UE 4 学习笔记 1
- QT/Gstreamer资料
- Item40 Use std::atomic for concurrency, volatile for specific memory
- UVA