Remmarguts' Date POJ - 2449

2024-02-22 18:58
文章标签 poj date 2449 remmarguts

本文主要是介绍Remmarguts' Date POJ - 2449,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击打开链接

K短路 存模板

#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 0x3f3f3f3fint dis[1010];struct node1
{int v;int w;int next;
};struct node2
{bool operator < (const node2 &rhs) const{return val + dis[id] > rhs.val + dis[rhs.id];}int id;int val;
};priority_queue <node2> que;
node1 edge1[200010],edge2[200010];
int first1[1010],first2[1010],book[1010];
int n,m,num,s,e,k;void addedge(node1* edge,int* first,int u,int v,int w)
{edge[num].v=v;edge[num].w=w;edge[num].next=first[u];first[u]=num++;return;
}void dijkstra()
{node2 cur,tem;int i,u,v,w;while(!que.empty()) que.pop();memset(dis,0x3f,sizeof(dis));memset(book,0,sizeof(book));tem.id=e,tem.val=0;que.push(tem);dis[e]=0;while(!que.empty()){cur=que.top();que.pop();u=cur.id;if(book[u]) continue;book[u]=1;for(i=first2[u];i!=-1;i=edge2[i].next){v=edge2[i].v,w=edge2[i].w;if(!book[v]&&dis[v]>dis[u]+w){dis[v]=dis[u]+w;tem.id=v,tem.val=dis[v];que.push(tem);}}}return;
}int astar()
{node2 cur,tem;int i,u,v,w;while(!que.empty()) que.pop();tem.id=s,tem.val=0;que.push(tem);k--;while(!que.empty()){cur=que.top();que.pop();u=cur.id;if(u==e){if(k>0) k--;else return cur.val;}for(i=first1[u];i!=-1;i=edge1[i].next){v=edge1[i].v,w=edge1[i].w;tem.id=v,tem.val=cur.val+w;que.push(tem);}}return -1;
}int main()
{int i,u,v,w;while(scanf("%d%d",&n,&m)!=EOF){memset(first1,-1,sizeof(first1));memset(first2,-1,sizeof(first2));num=0;for(i=1;i<=m;i++){scanf("%d%d%d",&u,&v,&w);addedge(edge1,first1,u,v,w);addedge(edge2,first2,v,u,w);}scanf("%d%d%d",&s,&e,&k);dijkstra();if(dis[s]==N){printf("-1\n");continue;}if(s==e) k++;printf("%d\n",astar());}return 0;
}

 

这篇关于Remmarguts' Date POJ - 2449的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/736184

相关文章

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

poj 1511 Invitation Cards(spfa最短路)

题意是给你点与点之间的距离,求来回到点1的最短路中的边权和。 因为边很大,不能用原来的dijkstra什么的,所以用spfa来做。并且注意要用long long int 来存储。 稍微改了一下学长的模板。 stack stl 实现代码: #include<stdio.h>#include<stack>using namespace std;const int M

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];