ACM-ICPC 2018 沈阳赛区网络预赛 Made In Heaven(K短路)题解
思路:K短路裸题
代码:
- #include<queue>
- #include<cstring>
- #include<set>
- #include<map>
- #include<stack>
- #include<string>
- #include<cmath>
- #include<vector>
- #include<cstdio>
- #include<iostream>
- #include<algorithm>
- typedef long long ll;
- using namespace std;
- const int maxn = + ;
- const int maxm = + ;
- const int seed = ;
- const ll MOD = 1e9 + ;
- const int INF = 0x3f3f3f3f;
- struct Edge{
- int v, w, next;
- };
- struct As{
- int f, g, pos;
- bool operator < (const As a) const{
- return a.f == f? a.g < g : a.f < f;
- }
- };
- int n, m, k, tot1, tot2, T;
- int head1[maxn], head2[maxn], dis[maxn];
- bool vis[maxn];
- Edge edge1[maxm], edge2[maxm];
- void init(){
- memset(head1, -, sizeof(head1));
- memset(head2, -, sizeof(head2));
- tot1 = tot2 = ;
- }
- void addEdge(int u, int v, int w){
- edge1[tot1].v = v;
- edge1[tot1].w = w;
- edge1[tot1].next = head1[u];
- head1[u] = tot1++;
- edge2[tot2].v = u;
- edge2[tot2].w = w;
- edge2[tot2].next = head2[v];
- head2[v] = tot2++;
- }
- void spfa(int st){
- for(int i = ; i <= n; i++) dis[i] = INF;
- memset(vis, false, sizeof(vis));
- vis[st] = true;
- dis[st] = ;
- queue<int> q;
- while(!q.empty()) q.pop();
- q.push(st);
- while(!q.empty()){
- int u = q.front();
- q.pop();
- vis[u] = false;
- for(int i = head2[u]; i != -; i = edge2[i].next){
- int v = edge2[i].v;
- int w = edge2[i].w;
- if(dis[v] > dis[u] + w){
- dis[v] = dis[u] + w;
- if(!vis[v]){
- vis[v] = true;
- q.push(v);
- }
- }
- }
- }
- }
- int Astar(int st, int end){
- int cnt = ;
- priority_queue<As> q;
- while(!q.empty()) q.pop();
- if(st == end) k++;
- if(dis[st] == INF) return -;
- As a, b;
- a.pos = st, a.g = , a.f = a.g + dis[st];
- q.push(a);
- while(!q.empty()){
- a = q.top();
- q.pop();
- if(a.f > T) return -;
- if(a.pos == end && a.f <= T){
- cnt++;
- if(cnt == k) return ;
- }
- for(int i = head1[a.pos]; i != -; i = edge1[i].next){
- b.pos = edge1[i].v;
- b.g = a.g + edge1[i].w;
- b.f = b.g + dis[b.pos];
- q.push(b);
- }
- }
- return -;
- }
- int main(){
- int s, e;
- while(~scanf("%d%d", &n, &m)){
- init();
- scanf("%d%d%d%d", &s, &e, &k, &T);
- for(int i = ; i <= m; i++){
- int u, v, w;
- scanf("%d%d%d", &u, &v, &w);
- addEdge(u, v, w);
- }
- spfa(e);
- int ans = Astar(s, e);
- if(ans == -)
- printf("Whitesnake!\n");
- else
- printf("yareyaredawa\n");
- }
- return ;
- }
ACM-ICPC 2018 沈阳赛区网络预赛 Made In Heaven(K短路)题解的更多相关文章
- ACM-ICPC 2018 沈阳赛区网络预赛 K Supreme Number(规律)
https://nanti.jisuanke.com/t/31452 题意 给出一个n (2 ≤ N ≤ 10100 ),找到最接近且小于n的一个数,这个数需要满足每位上的数字构成的集合的每个非空子集 ...
- ACM-ICPC 2018 沈阳赛区网络预赛-K:Supreme Number
Supreme Number A prime number (or a prime) is a natural number greater than 11 that cannot be formed ...
- ACM-ICPC 2018 沈阳赛区网络预赛-D:Made In Heaven(K短路+A*模板)
Made In Heaven One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. ...
- 图上两点之间的第k最短路径的长度 ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven
131072K One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. Howe ...
- ACM-ICPC 2018 沈阳赛区网络预赛 J树分块
J. Ka Chang Given a rooted tree ( the root is node 11 ) of NN nodes. Initially, each node has zero p ...
- ACM-ICPC 2018 沈阳赛区网络预赛 K. Supreme Number
A prime number (or a prime) is a natural number greater than 11 that cannot be formed by multiplying ...
- ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph
"Oh, There is a bipartite graph.""Make it Fantastic." X wants to check whether a ...
- Fantastic Graph 2018 沈阳赛区网络预赛 F题
题意: 二分图 有k条边,我们去选择其中的几条 每选中一条那么此条边的u 和 v的度数就+1,最后使得所有点的度数都在[l, r]这个区间内 , 这就相当于 边流入1,流出1,最后使流量平衡 解析: ...
- ACM-ICPC 2018 沈阳赛区网络预赛 F Fantastic Graph(贪心或有源汇上下界网络流)
https://nanti.jisuanke.com/t/31447 题意 一个二分图,左边N个点,右边M个点,中间K条边,问你是否可以删掉边使得所有点的度数在[L,R]之间 分析 最大流不太会.. ...
随机推荐
- CCO2017 Vera and Trail Building 构造+图论
正解:构造+图论 解题报告: 找了半天才找到的传送门! 先简要表达下题意 一个图上,如果存在(a,b)满足a<b且存在从a到b再回到a的路径,每条道路被经过至多一次,我们称(a,b)为完美点对试 ...
- 高并发秒杀系统方案(JSR303参数校验)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
- js-jquery-数组遍历
一.原生方法支持 1.普通for循环 for(j = 0; j < arr.length; j++) { } 说明:性能很高,但是仍可以优化. 2.优化版for循环[推荐] for(j = 0, ...
- python接口自动化-token参数关联登录(二)
原文地址https://www.cnblogs.com/yoyoketang/p/9098096.html 原文地址https://www.cnblogs.com/yoyoketang/p/68866 ...
- Perl的变量及语境(一)
Perl语言中的大部分语句表达式后都紧接一个分号,分隔不同的Perl语句. perl解释器能一次完成编译和运行这两个动作. perl通过一对反引号"``"来表示运行外部命令. 也可 ...
- python 爬取html页面
#coding=utf-8 import urllib.request def gethtml(url): page=urllib.request.urlopen(url) html=page.rea ...
- CAReplicatorLayer
CAReplicatorLayer CAReplicatorLayer的目的是为了高效生成许多相似的图层.它会绘制一个或多个图层的子图层,并在每个复制体上应用不同的变换.看上去演示能够更加解释这些,我 ...
- 获取Android设备的唯一识别码|设备号|序号|UUID
如何获取一个能唯一标识每台Android设备的序号? 这个问题有很多答案,但是他们中的大部分只在某些情况下有效. 根据测试: 所有的设备都可以返回一个 TelephonyManager.getDevi ...
- quartz开源作业调度框架的配置
quartz开源作业调度框架的job服务实现,Quartz是一个完全由java编写的开源作业调度框架,使用时候需要创建一个实现org.quartz.Job接口的java类,Job接口包含唯一的方法: ...
- java接口对接——调用别人接口推送数据
实际开发中经常会遇到要和其他平台或系统对接的情况,实际操作就是互相调用别人的接口获取或者推送数据, 当我们调用别人接口推送数据时,需要对方给一个接口地址以及接口的规范文档,规范中要包括接口的明确入参及 ...