二次联通门 : BZOJ 1073: [SCOI2007]kshort

/*
BZOJ 1073: [SCOI2007]kshort A* k短路
但是会爆一个点, 是卡A*的
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <cstdlib> const int BUF = ;
char Buf[BUF], *buf = Buf;
#define Max 120
#define Vec std :: vector
int dis[Max], N, M, S, T, K;
struct D
{
Vec <int> r; bool is[Max]; int u, d;
bool operator < (const D A) const
{
return this->d + dis[this->u] > A.d + dis[A.u];
}
};
bool visit[Max];
struct E { E *n; int v, d; };
E *Z_list[Max], *F_list[Max], poor[(Max * Max) << ], *Ta = poor;
inline int read (int &now)
{
for (now = ; !isdigit (*buf); ++ buf);
for (; isdigit (*buf); now = now * + *buf - '', ++ buf);
}
void Spfa ()
{
std :: queue <int> Q; memset (dis, 0x3f, sizeof dis); int n; E *e;
for (Q.push (T), dis[T] = , visit[T] = true; !Q.empty (); Q.pop ())
{
n = Q.front (); visit[n] = false;
for (e = F_list[n]; e; e = e->n)
if (dis[e->v] > dis[n] + e->d)
{
dis[e->v] = dis[n] + e->d;
if (!visit[e->v]) visit[e->v] = true, Q.push (e->v);
}
}
}
Vec <D> Answer; int C;
inline int min (int a, int b) { return a < b ? a : b; }
bool Comp (D A, D B)
{
if (A.d != B.d) return A.d < B.d;
int L = min (A.r.size (), B.r.size ());
for (register int i = ; i < L; ++ i)
if (A.r[i] != B.r[i]) return A.r[i] < B.r[i];
return A.r.size () < B.r.size ();
}
void A_star ()
{
std :: priority_queue <D> H; D n, res; n.u = S, n.d = ;
n.r.push_back (S); E *e; n.is[S] = true; H.push (n);
for (; !H.empty (); )
{
n = H.top (); H.pop ();
if (n.u == T)
{
if ((++ C) > K && n.d > Answer[K - ].d) break;
Answer.push_back (n);
}
for (e = Z_list[n.u]; e; e = e->n)
if (!n.is[e->v])
{
res = n; res.u = e->v; res.r.push_back (e->v);
res.d = e->d + n.d, res.is[e->v] = true, H.push (res);
}
}
if (Answer.size () < K) { printf ("No\n"); exit (); }
std :: sort (Answer.begin (), Answer.end (), Comp);
} int Main ()
{
fread (buf, , BUF, stdin); read (N), read (M), read (K);
read (S), read (T); register int i; int x, y, z, Size;
for (i = ; i <= M; ++ i)
{
read (x), read (y), read (z);
++ Ta, Ta->v = y, Ta->d = z, Ta->n = Z_list[x], Z_list[x] = Ta;
++ Ta, Ta->v = x, Ta->d = z, Ta->n = F_list[y], F_list[y] = Ta;
}
for (Spfa (), A_star (), i = , Size = Answer[K - ].r.size () - ; i < Size; ++ i)
printf ("%d-", Answer[K - ].r[i]);
printf ("%d", Answer[K - ].r[i]);
return ;
}
int ZlycerQan = Main (); int main (int argc, char *argv[]) {;}

BZOJ 1073: [SCOI2007]kshort的更多相关文章

  1. bzoj1073[SCOI2007]kshort

    1073: [SCOI2007]kshort Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1483  Solved: 373[Submit][Sta ...

  2. POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流)

    POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流) Description Yo ...

  3. bzoj 1067: [SCOI2007]降雨量

    题目链接: bzoj 1067: [SCOI2007]降雨量 题解: 很简单的一道题,但代码里有许多细节需要注意,切容易出错,调了三个小时OTZ 做一个st表维护区间最大值就 在获得年份在序列中的po ...

  4. COGS——T 2342. [SCOI2007]kshort || BZOJ——T 1073

    http://www.cogs.pro/cogs/problem/problem.php?pid=2342 ★★☆   输入文件:bzoj_1073.in   输出文件:bzoj_1073.out   ...

  5. BZOJ 1070: [SCOI2007]修车 [最小费用最大流]

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4936  Solved: 2032[Submit][Status] ...

  6. BZOJ 1072: [SCOI2007]排列perm 状态压缩DP

    1072: [SCOI2007]排列perm Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为 ...

  7. bzoj 1070: [SCOI2007]修车 费用流

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2785  Solved: 1110[Submit][Status] ...

  8. bzoj 1068: [SCOI2007]压缩 DP

    1068: [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 496  Solved: 315[Submit][Status] D ...

  9. bzoj 1069 [SCOI2007]最大土地面积(旋转卡壳)

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2277  Solved: 853[Submit][Stat ...

随机推荐

  1. ultraedit 实际应用技巧

    Tip 1: Alt+C 列模式可以说最初选择使用这个文本编辑软件,原因很简单,就是因为“她”具有列编辑模式.如果您还不知道什么是列编辑模式的话,我想您应该好好研究一下啦.这是一个超级“赞”的功能.在 ...

  2. Rediskey生命周期管理-key聚合

    | 导语 Redis中的数据以k-v的方式组织:为了方便管理key一般具有某些特定的模式:有些key直接是由mysql中的表行数据转化而来:如果要对Redis的key进行生命周期管理,由于Redis的 ...

  3. 使用CertUtil.exe下载远程文件

    使用CertUtil.exe下载远程文件 证书 https://www.cnblogs.com/17bdw/p/8728656.html 1.前言 经过国外文章信息,CertUtil.exe下载恶意软 ...

  4. iOS - WebRTC的实现原理

    再简单地介绍一下webrtc: WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,简而言之它是一个支持网页浏览器进行实时语音对话或视频对话的技术. 它 ...

  5. JavaScript_01-script

    编译和解释 var a = 0; console.log(a); var b = "abc"; 编译: 一次性把代码转换成 CPU 可以看懂的语言,一行一行执行: 解释:一行一行解 ...

  6. mac安装openjdk8-maven-mysql-git-docker

    1. openjdk8安装命令查看地址:https://github.com/AdoptOpenJDK/homebrew-openjdk#other-versions   感觉上面命令地址不靠谱,还是 ...

  7. git注册和基本命令

    注册账户以及创建仓库 要想使用github第一步当然是注册github账号了.之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之 ...

  8. log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment)的解决

    报错:log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironme ...

  9. Mongodb的主从复制

    主从服务器的实现原理 首先,主节点会把本服务的与写有关的操作记录下来,读操来不记录,这些操作就记录在local数据库中的oplog.$admin这个集合中,这是一个固定集合,大小是可以配置的,主要是通 ...

  10. 小程序框架之视图层 View

    (1)视图层View 框架的视图层由 WXML 与 WXSS 编写,由组件来进行展示. 将逻辑层的数据反应成视图,同时将视图层的事件发送给逻辑层. WXML(WeiXin Markup languag ...