匈牙利游戏之A*版
来源:互联网 发布:房屋设计图平面图软件 编辑:程序博客网 时间:2024/06/06 19:31
题目>>http://codevs.cn/problem/1269/
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<queue>using namespace std;const int MAXN = 8e5 + 5;const int INF = 1e7;struct zz{ int num,ds,de; bool operator < (zz a) const { return (a.de + a.ds) < de + ds; }}num[50005];queue<int>q;priority_queue<zz>p;struct zt{ int f,t,v;}road[MAXN];struct zg{ int f,t,v;}road2[MAXN];int l = 1e6;int m,n,k,s,e,a,b,c,ans,firs[50005],nex[MAXN],cnt = 0,used[50005],ji = 0,lu = -1,cnt2 = 0,firs2[50005],nex2[MAXN];void build(int f,int t,int v){ road[++cnt] = (zt){f,t,v}; nex[cnt] = firs[f]; firs[f] = cnt;}void build2(int f,int t,int v){ road2[++cnt2] = (zg){f,t,v}; nex2[cnt2] = firs2[f]; firs2[f] = cnt2;}void spfa(int x){ while(!q.empty()) q.pop(); for(int i = 1;i <= n;i ++) num[i].de = INF; num[x].de = 0; memset(used,0,sizeof(used)); q.push(x); while(!q.empty()) { int u = q.front(); q.pop(); used[u] = 0; for(int i = firs[u];i != -1;i = nex[i]) { int t = road[i].t; if(num[t].de > num[u].de + road[i].v) { num[t].de = num[u].de + road[i].v; if(!used[t]) q.push(t); used[t] = 1; } } }}void dijk(int x){ while(!p.empty()) p.pop(); num[x].ds = 0; for(int i = 1;i <= n;i ++) num[i].num = i; p.push(num[x]); l --; while(!p.empty()) { zz u = p.top(); p.pop(); if(ans) break; if(u.num == e&&lu != u.ds) ji ++,lu = u.ds; if(ji == k) ans = u.ds; for(int i = firs2[u.num];i != -1;i = nex2[i]) { int t = road2[i].t; if(l) p.push((zz){t,u.ds + road2[i].v,num[t].de}),l --; } }}int main(){ scanf("%d%d",&n,&m); memset(firs,-1,sizeof(firs)); memset(firs2,-1,sizeof(firs2)); for(int i = 1; i<= m;i ++) { scanf("%d%d%d",&a,&b,&c); build(b,a,c); build2(a,b,c); } // scanf("%d%d%d",&s,&e,&k); s = 1;e = n;k = 2; spfa(e); dijk(s); if(ans) printf("%d",ans); else puts("-1");}
阅读全文
0 0
- 匈牙利游戏之A*版
- 匈牙利游戏
- wikioi 1269 匈牙利游戏
- 【codevs 1269】匈牙利游戏
- 【codevs1269】匈牙利游戏
- 【codevs 1269】匈牙利游戏
- Codevs1269 匈牙利游戏
- codevs 1269 匈牙利游戏
- [codevs1269] 匈牙利游戏
- codevs 1269 匈牙利游戏
- 【codevs 1269】匈牙利游戏
- 【codevs 1269】匈牙利游戏
- 棋盘游戏(匈牙利算法)
- SCOI2010游戏[匈牙利算法复习]
- 匈牙利算法之hdu1150
- 匈牙利算法之POJ1087
- 匈牙利算法之POJ1466
- 匈牙利算法之hdu2458
- bzoj 1632: [Usaco2007 Feb]Lilypad Pond SPFA
- 任务、进程、线程之间的区别
- openwrt各种奇怪问题总结(对C++依赖)
- POJ
- 关于ip
- 匈牙利游戏之A*版
- 随笔
- 栈与堆
- BZOJ 1026 数位DP
- JS -api使用说明
- buffer_pool.go
- 图片剪切并上传服务器
- centos7 lvm管理 把/home空间转移给/
- redis--数据库