POJ 2449 Remmarguts' Date K短路
来源:互联网 发布:浏览器注入js脚本 编辑:程序博客网 时间:2024/06/07 10:49
K短路:dijkstra+A*(rec).
k短路问题模板.
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#include<iostream>#include<queue>using namespace std;const int maxn=100010;int n,m,l;int dis[maxn];bool vis[maxn];int head1[maxn];int cnt[maxn];int head2[maxn];struct edge{ int to; int next; int val;}s1[maxn*2],s2[maxn*2];struct node{ int f; int g; int from; bool operator < (node a)const { if(a.f==f) return g>a.g; return f>a.f; }};void add(int x,int y,int k){ l++; s1[l].to=y; s1[l].next=head1[x]; s1[l].val=k; head1[x]=l; s2[l].to=x; s2[l].next=head2[y]; s2[l].val=k; head2[y]=l;}void spfa(int k){ int i,j; for(i=1;i<=n;i++) dis[i]=maxn; dis[k]=0; queue<int>q; q.push(k); vis[k]=1; while(!q.empty()) { int x=q.front(); q.pop(); vis[x]=0; for(i=head2[x];i!=-1;i=s2[i].next) { int y=s2[i].to; if(dis[y]>dis[x]+s2[i].val) { dis[y]=dis[x]+s2[i].val; if(!vis[y]) { q.push(y); vis[y]=1; } } } }}int make(int x,int y,int k){ if(x==y) k++; if(dis[x]==maxn) return -1; priority_queue<node>q; int sum=0; node p1,p2; p1.from=x; p1.g=0; p1.f=p1.g+dis[p1.from]; q.push(p1); while(!q.empty()) { p1=q.top(); q.pop(); if(p1.from==y) sum++; if(sum==k) return p1.g; for(int i=head1[p1.from];i!=-1;i=s1[i].next) { p2.from=s1[i].to; p2.g=p1.g+s1[i].val; p2.f=p2.g+dis[p2.from]; q.push(p2); } } return -1;}int main(void){ int i,j,k; int x,y,z; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) { dis[i]=maxn; } l=0; memset(head1,-1,sizeof(head1)); memset(head2,-1,sizeof(head2)); for(i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&k); add(x,y,k); } scanf("%d%d%d",&x,&y,&k); spfa(y); z=make(x,y,k); printf("%d\n",z); } return 0;}
阅读全文
0 0
- Poj 2449 Remmarguts' Date(Astar K短路)
- POJ 2449 Remmarguts' Date k短路
- Poj 2449 Remmarguts' Date (第k短路)
- POJ-2449 Remmarguts' Date k短路
- POJ 2449 Remmarguts' Date 求K短路
- POJ 2449 Remmarguts' Date(k短路)
- POJ 2449 Remmarguts' Date K短路
- POJ 2449 Remmarguts' Date (第k短路)
- [POJ 2449] Remmarguts' Date 第K短路
- POJ 2449 Remmarguts' Date K短路
- POJ 2449 Remmarguts' Date(k短路)
- POJ 2449 Remmarguts' Date [第k短路]
- poj--2449 Remmarguts' Date(k短路)
- 【POJ】2449 Remmarguts' Date【k短路】
- poj 2449 Remmarguts' Date(K短路)
- poj 2449 Remmarguts' Date (k短路)
- POJ 2449 Remmarguts' Date【K短路】
- poj 2449 Remmarguts' Date(第K短路)
- ZTE 2018
- tip
- JavaScript对象和方法算术运算或输出之valueOf和toString优先级
- Python3之互斥锁
- shell 脚本删除过期文件
- POJ 2449 Remmarguts' Date K短路
- VC-文件隐藏的三种常用方法
- gulp-usemin <gulp插件>
- python|打印杨辉三角
- Wooden Sticks
- Android Studio 打包时 Signature Version V1 V2
- IFIX 4.0 竖向文字
- 做项目周报 心得
- 简单的KNN的python实现