图论&搜索:K短路-启发式搜索
判断第k短路的权值是否小于T
直接把队友的代码拿过来了,一定很经典
#include <iostream>
#include <queue>
#include <cstring>
#include <vector> using namespace std; const int maxn = ;
const int INF = 0x7fffffff;
int N, M, S, E, K, T;
int inq[maxn];
int dis[maxn];
int cnt[maxn]; struct Edge
{
int u, v, w;
Edge(int a, int b, int c):u(a), v(b), w(c){}
}; struct Node
{
int d, v;
Node(int a, int b):d(a), v(b){}
bool operator < (const Node &x) const {return d+dis[v]>x.d+dis[x.v];}
}; struct Node1
{
int d, v;
Node1(int a, int b):d(a), v(b){}
bool operator < (const Node1 &x) const {return d>x.d;}
}; vector<Edge> edge1;
vector<Edge> edge2;
vector<int> G1[maxn];
vector<int> G2[maxn]; inline void addedge(int a, int b, int c)
{
edge1.push_back(Edge(a,b,c));
G1[a].push_back(edge1.size()-);
edge2.push_back(Edge(b,a,c));
G2[b].push_back(edge2.size()-);
} void dijkstra_init()
{
priority_queue<Node1>Q;
memset(inq, , sizeof(inq));
std::fill(dis, dis+maxn, INF);
dis[E] = ;
Q.push(Node1(, E));
while(!Q.empty())
{
auto x = Q.top(); Q.pop();
if(inq[x.v]) continue;
inq[x.v] = true;
for(int i = ; i < G2[x.v].size(); ++i)
{
Edge &m = edge2[G2[x.v][i]];
if(dis[m.v]>dis[m.u]+m.w)
{
dis[m.v] = dis[m.u]+m.w;
Q.push(Node1(dis[m.v], m.v));
}
}
}
} int k_th()
{
memset(cnt, , sizeof(cnt));
priority_queue<Node>Q;
if(dis[S]>=INF) return -;
Node e(, S);
Q.push(e); while(!Q.empty())
{
Node x = Q.top();Q.pop(); cnt[x.v]++; if(x.v == E)
{
if(x.d>T) return -;
if(cnt[x.v] == K) return x.d;
} if (cnt[x.v] > K) continue; for(unsigned int i = ; i < G1[x.v].size(); i++)
{
Node n(x.d+edge1[G1[x.v][i]].w, edge1[G1[x.v][i]].v);
if(cnt[n.v] != K)
Q.push(n);
}
}
return -;
} int main()
{
while(scanf("%d%d", &N, &M) != EOF)
{
edge1.clear();
edge2.clear(); for(int i = ; i < maxn; ++i)
{
G1[i].clear();
G2[i].clear();
} scanf("%d%d%d%d", &S, &E, &K, &T); for(int i = ; i <= M; ++i)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
addedge(a, b, c);
} dijkstra_init(); int ans = k_th(); if(ans <= T && ans != -) printf("yareyaredawa\n");
else printf("Whitesnake!\n");
}
return ;
}
图论&搜索:K短路-启发式搜索的更多相关文章
- Remmarguts' Date POJ - 2449 (A*搜索|k短路)
"Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. ...
- 数据结构&图论:K短路-可持久化可并堆
本来A*就可以搞定的题,为了怕以后卡复杂度,找了个这么个方法 现阶段水平不够就不补充算法分析部分了 对于图G,建立一个以终点t为起点的最短路径构成的最短路径树 (就是反着跑一遍最短路,然后对于一个不为 ...
- POJ 2449 Dijstra + A* K短路
这题一开始的思路应该是直接从源点进行BFS搜索K短路. 但这样的复杂度在点数和K的值增大后将会变得很大. 而A*算法则构造一个h(x),在进行BFS时,每次都抛出最小的h(x)从而使汇点的出队速度加快 ...
- 【10.9校内练习赛】【搜索】【2-sat】【树链剖分】【A_star k短路】【差分约束+判负环】
在洛谷上复制的题目! P3154 [CQOI2009]循环赛 题目描述 n队伍比赛,每两支队伍比赛一次,平1胜3负0. 给出队伍的最终得分,求多少种可能的分数表. 输入输出格式 输入格式: 第一行包含 ...
- 多源第k短路 (ford + 重新定义编号) / 出发点、终点确定的第k短路 (Spfa+ 启发搜索)
第k短路 Description 一天,HighLights实在是闲的不行,他选取了n个地点,n各地点之间共有m条路径,他想找到这m条路径组成的第k短路,你能帮助他嘛? Input 第一行三个正整数, ...
- 与图论的邂逅07:K短路
在做最短路的题时我们不免会碰到许多求次短路的题,然而我们也能很快地想到解决的办法: 用dijkstra跑一遍最短路,当终点第二次被取出时就是次短路了.时间复杂度为O((N+M)logN).实际上前面得 ...
- 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 25216 Accepted: 6882 ...
- WC2015 k小割(k短路+暴力+搜索)
首先这道题不是非同一般的恶心,三个数据层次对应三个程序= = PROBLEM:http://uoj.ac/problems解法: 1~2直接暴力枚举边的选择与否+判断就行了 7~14可以发现是一个平面 ...
- 【模板篇】k短路 SDOI2010 魔法猪学院
题目传送门 吐槽时间 题目分析 代码 题目の传送门 都成了一道模板题了OvO ============================================================= ...
随机推荐
- 【探路者】团队互评Alpha版本
[探路者]组互评连接: 1互评作品:SkyHunter http://www.cnblogs.com/zej87/p/7802000.html 2互评作品:爱阅app http://www.cnblo ...
- python __call__ 函数
__call__ Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的. 换句话说,我们可以把这个类型的对象当作函数来使用,相当于 重载了括号运算符. ...
- 新手使用github过程记录
初次接触github,记录下我的使用过程.一开始确实有些懵,但好在网上这类的教程有很多,过程也很详细易懂,按照网上的教程走完全没问题,感谢无私分享辛苦整理的各位前辈们. 注册github账号 创建一个 ...
- lintcode-422-最后一个单词的长度
422-最后一个单词的长度 给定一个字符串, 包含大小写字母.空格' ',请返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 注意事项 一个单词的界定是,由字母组成,但不包含任何的空 ...
- SQL 语句(增删改查)
一.增:有4种方法1.使用insert插入单行数据: --语法:insert [into] <表名> [列名] values <列值> 例:insert into Strden ...
- 控件属性和InitializeComponent()关系:
namespace Test22 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> priv ...
- J2EE十三种技术规范介绍
J2EE的十三个技术规范 J2EE体系结构 一.JDBC:Java Data Base Connectivity,数据库连接 我们大家对微软公司的ODBC数据库访问接口比较熟悉,而在Java中创建数据 ...
- a标签不能嵌套
<a href='http://www.baidu.com'> <a href='http://www.google.com'></a> </a> &l ...
- HDU4647_Another Graph Game
有趣的博弈题. 关键在于把比边权的平分到两边的点权上面,然后点权排序,每次从大的开始拿就可以了. #include <iostream> #include <cstdio> # ...
- luogu 2115 破坏(01分数规划)
题意:给出一个序列,删除一个连续的子串后使得剩下的平均值最小. 典型的01分数规划,令f(x)=(sum1[i]+sum2[j])/(i+j).sum1表示前缀和,sum2表示后缀和,那么我们就相当于 ...