hdu6181 Two Paths
来源:互联网 发布:怎么样开淘宝店的流程 编辑:程序博客网 时间:2024/05/20 19:31
一道A*算法求第k短路的模板题,但是!我有话要说。
可能因为学校老师比较水,我们讲迪杰斯特拉算法的时候老师讲了个n^2算法实现的,教科书上也他妈n^2,我也没细想
后来比赛的时候我自己优化了,结果一百度发现直接优先级队列,elogn。。。。。伤心,错过一道水题。
自己做了个模板,以后直接用。对了,A*算法确实有复杂的用法,但是我们这里只要利用他求第k短就行了。
至于估值函数 F=G+H 这里求H用了迪杰斯特拉算法。
#include<iostream>#include<queue>#include<cstdio>#include<vector>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;int T,n,m,a,b,w;ll inf=1e18;typedef struct node { //dij and mpint at;ll len;bool operator < (const node &te) const { return len>te.len;}}node;typedef struct _node { //Astarint at;ll len;ll tot;bool operator < (const _node &te) const { return tot>te.tot;}}_node;vector<node> mp[100005];ll dis[100005];ll dij(int go) {priority_queue<node> q;for(int i=1;i<=n;i++) {dis[i]=inf;}dis[go]=0;q.push(node{go,0});while(!q.empty()) {node e=q.top(); q.pop();//这里加跳出判断可以求出最短路,也就是单纯的dij for(int i=0;i<mp[e.at].size();i++) {node xe=mp[e.at][i];if(e.len+xe.len<dis[xe.at]) {dis[xe.at]=e.len+xe.len;q.push(node{xe.at,e.len+xe.len});}}}return 0;//返回最短路径,这个题目不需要 }ll Astar(int Start,int End,int Knum) { priority_queue<_node> q; q.push(_node{Start,0,dis[Start]}); while(!q.empty()) { _node e=q.top(); q.pop(); if(e.at==End) { Knum--; if(Knum==0) return e.tot;} for(int i=0;i<mp[e.at].size();i++) { node xe=mp[e.at][i]; q.push(_node{xe.at,e.len+xe.len,e.len+xe.len+dis[xe.at]});}}}int main() {scanf("%d",&T);while(T--) {scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) {mp[i].clear();}for(int i=1;i<=m;i++) {scanf("%d%d%d",&a,&b,&w);mp[a].push_back(node{b,w});mp[b].push_back(node{a,w});}int Start=1,End=n,Knum=2;//A*求第Knum段路 ll ans1=dij(n);ll ansKnum=Astar(Start,End,Knum);printf("%lld\n",ansKnum);}return 0;}
阅读全文
0 0
- hdu6181 Two Paths
- HDU6181-Two Paths
- HDU6181 Two Paths【次短路】
- hdu6181 Two Paths 次短路模板
- hdu6181 Two Paths(次短路)
- HDU6181-Two Paths【A*算法or次短路】
- HDU6181 Two Paths(次短路,路径记录,spfa,2017 HDU多校联赛 第10场)
- hdu6181-启发式搜索A*|次短路模板|最短路枚举-Two Paths
- 【hdu6181】Two Paths(次短路----每条边经过不止一次)
- HDU 6181 Two Paths
- HDU 6181 Two Paths
- hdu 6181 Two Paths
- Two Paths HDU
- hdu6181 How Many Paths Are There(次短路条数[模板])
- Codeforces 14D Two Paths
- CodeForces 14D Two Paths
- codeforces 36E Two Paths
- MES & ERP: Two Paths to Operations Management
- 自动化测试之Python + selenium = Web UI自动化测试
- 详述 tomcat 的 server.xml 配置文件
- Java 获取文件大小及文件读写操作
- SG函数打表-HDU1848
- 如何通俗易懂地解释遗传算法
- hdu6181 Two Paths
- 文章标题
- ACM向:关于优先队列priority_queue自定义比较函数用法整理
- 获取文件大小/查找文件
- 更改课堂案例功能,实现即时通信功能,即两个客户端进行文字聊天。
- Sublime一些常见操作
- Android7.1上报的CNEService/WbcService/LauncherUnreadService停止运行错误,拔掉电池重启开机几次才不报
- Hadoop入门之几个Demo的加强版本
- BZOJ 2440 完全平方数 (二分 莫比乌斯容斥)