银川区域赛 H道路与航线(原题啊)
按照《算法竞赛进阶指南》写的
哦对了,注意下最后判断,因为开始拓扑的时候,s可能不在里边,所以不一定等于INF,而是应该大于等于INF
#include<cstring>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
#define maxn 50000
using namespace std;
const long long INF = 1000000000000000;
typedef long long ll;
struct Node {
int p;
ll len;
Node(int a, ll b) :p(a), len(b) {}
};
vector<Node>G[maxn];
vector<int> block[maxn]; void insert(int be, int en, ll len) {
G[be].push_back(Node(en, len));
}
bool operator <(const Node a, const Node b) {
return a.len > b.len;
}
vector<int>blck[maxn];
queue<int>Q;
priority_queue<Node>que;
int n, m1, m2;
int vis[maxn];
ll dis[maxn];
int clor[maxn];
int de[maxn];
int cnt = 0;
int dfs(int x) {
vis[x] = 1;
blck[cnt].push_back(x);
clor[x] = cnt;
for (int i = 0; i < G[x].size(); i++) {
int p = G[x][i].p;
if (!vis[p]) dfs(p);
}
return 0;
} int main() {
int s;
scanf("%d %d %d %d", &n, &m1, &m2, &s);
int be, en;
ll len;
for (int i = 0; i < m1; i++) {
scanf("%d %d %lld", &be, &en, &len);
insert(be, en, len);
insert(en, be, len);
}
int ans = 0;
for (int i = 1; i <= n; i++) {
if (!vis[i]) {
cnt++;
dfs(i);
}
}
memset(vis, 0, sizeof(vis));
for (int i = 0; i < m2; i++) {
scanf("%d %d %lld", &be, &en, &len);
insert(be, en, len);
de[clor[en]]++;
}
//dfs2(s);
for(int i=0;i<=10+n;i++) dis[i] = INF;
dis[s] = 0;
for (int i = 1; i <= cnt; i++) if (!de[i]) Q.push(i);
Q.push(clor[s]); while (!Q.empty()) {
int x = Q.front(); Q.pop();
for (int j = 0; j < blck[x].size(); j++) {
int c = blck[x][j];
que.push(Node(c, dis[c]));
}
while (!que.empty()) {
Node ans = que.top();
que.pop();
if (vis[ans.p]) continue;
vis[ans.p] = 1;
for (int i = 0; i < G[ans.p].size(); i++) {
int p = G[ans.p][i].p; if (dis[p] > dis[ans.p] + G[ans.p][i].len ) {
dis[p] = dis[ans.p] + G[ans.p][i].len;
if (clor[p] == clor[ans.p]) que.push(Node(p, dis[p]));
}
if (clor[p] != clor[ans.p] && (--de[clor[p]]) == 0) Q.push(clor[p]);
}
}
} for (int i = 1; i <= n; i++) {
if (dis[i] > 2000000000) printf("NO PATH\n");
else printf("%lld\n", dis[i]);
}
return 0;
}
银川区域赛 H道路与航线(原题啊)的更多相关文章
- Hihocoder 1634 Puzzle Game(2017 ACM-ICPC 北京区域赛 H题,枚举 + 最大子矩阵变形)
题目链接 2017 Beijing Problem H 题意 给定一个$n * m$的矩阵,现在可以把矩阵中的任意一个数换成$p$,求替换之后最大子矩阵的最小值. 首先想一想暴力的方法,枚举矩阵中 ...
- 2014牡丹江区域赛H(特里)ZOJ3826
Hierarchical Notation Time Limit: 2 Seconds Memory Limit: 131072 KB In Marjar University, stude ...
- 2017ccpc哈尔滨区域赛H
n堆石子 每次只能拿一个石子从一堆移到另一堆 知道所有的堆的石子数目都能整除x(x>1) 问最小移动次数 枚举x的可能取值 即a[i]和的素因子即可 合因子的区间变化会比较大 然后求余 ...
- UVALive 8519 Arrangement for Contests 2017西安区域赛H 贪心+线段树优化
题意 等价于给一个数列,每次对一个长度为$K$的连续区间减一 为最多操作多少次 题解: 看样例猜的贪心,10分钟敲了个线段树就交了... 从1开始,找$[i,i+K]$区间的最小值,然后区间减去最小值 ...
- 银川区域赛现场赛 Pot!!【线段树】
给定两个操作: MULTIPLY L R x 区间里都乘以一个数x MAX L R : 计算区间内一个2,3,5,7个数最大值. 思路:维护4个最大值.蓝瘦. /** 有 n 个数和 5 种操作 a ...
- 2019 ICPC 银川网络赛 H. Fight Against Monsters
It is my great honour to introduce myself to you here. My name is Aloysius Benjy Cobweb Dartagnan Eg ...
- 2017 ICPC区域赛(西安站)--- J题 LOL(DP)
题目链接 problem description 5 friends play LOL together . Every one should BAN one character and PICK o ...
- 2014年亚洲区域赛北京赛区现场赛A,D,H,I,K题解(hdu5112,5115,5119,5220,5122)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...
- 2019ICPC区域赛(银川)总结
2019ICPC银川 作为第一次打区域赛的我,心情异常激动,加上学校给坐飞机(事实上赶飞机很痛苦). 热身赛很难受,oj上不去,写AC自动机输入没写好.. 现场赛,开场直觉倒着看,发现签到.然后看B, ...
随机推荐
- linux下arm平台Qt编译环境搭建与解析
一.概述: 我们知道QTcreator.这仅仅是个IDE,他包含了一个编译器--qmake.这两者的关系与codeblocks和g++的关系一样,首先要明确这些. 而我们在linu ...
- 使用 Captcha 扩展包 为 Laravel 5 应用生成验证码
http://laravelacademy.org/post/3910.html 1.安装 我们通过 Composer 安装 Captcha 扩展包: composer require mews/ca ...
- async/await运用-前端表单弹窗验证同步书写方式(React)
在前端项目中,我们经常会碰到这样的场景: 当前我们有一个表单需要填写,在完成表单填写后经过校验之后会弹出短信或者其他形式验证码,进行补充校验,然后一起提交给接口. 场景如下图: 当前为创建操作,编辑操 ...
- 模板—tarjan缩点
void tarjan(int x) { dfn[x]=++cnt;low[x]=cnt; vi[x]=; stack[++top]=x; for(rint i=f(x);i;i=n(i)) if(! ...
- 微博第三方登录时,域名使用错误报错, Laravel \ Socialite \ Two \ InvalidStateException No message
使用微博第三方登录时,报错 Laravel \ Socialite \ Two \ InvalidStateException No message Laravel \Socialite \Two \ ...
- chrome谷歌浏览器怎么清除指定网站cookie
https://jingyan.baidu.com/article/fa4125aced30cc28ac709230.html 在使用电脑的情况下,由于到部分网站的cookie的问题导致的部分功能失效 ...
- 从外网站点获取的html去除换行回车制表位\n\r\t
StringStr.Replace("\\r", "").Replace("\\n", "").Replace(&quo ...
- laravel5.6 发送邮件附带邮件时,Unable to open file for reading,报错文件路径问题
https://stackoverflow.com/questions/48568739/unable-to-open-file-for-reading-swift-ioexception-in-la ...
- element表格多选实现单选
9.element多选表格实现单选 userChoose(selection, row) { console.log(selection,'selection') console.log(row,'r ...
- react组件之间的参数传递
1.父组件向子组件传递参数 class Child extends Component { componentDidMount(){ let name = this.props.default; co ...