按照《算法竞赛进阶指南》写的

哦对了,注意下最后判断,因为开始拓扑的时候,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道路与航线(原题啊)的更多相关文章

  1. Hihocoder 1634 Puzzle Game(2017 ACM-ICPC 北京区域赛 H题,枚举 + 最大子矩阵变形)

    题目链接  2017 Beijing Problem H 题意  给定一个$n * m$的矩阵,现在可以把矩阵中的任意一个数换成$p$,求替换之后最大子矩阵的最小值. 首先想一想暴力的方法,枚举矩阵中 ...

  2. 2014牡丹江区域赛H(特里)ZOJ3826

    Hierarchical Notation Time Limit: 2 Seconds      Memory Limit: 131072 KB In Marjar University, stude ...

  3. 2017ccpc哈尔滨区域赛H

    n堆石子 每次只能拿一个石子从一堆移到另一堆  知道所有的堆的石子数目都能整除x(x>1) 问最小移动次数 枚举x的可能取值  即a[i]和的素因子即可  合因子的区间变化会比较大   然后求余 ...

  4. UVALive 8519 Arrangement for Contests 2017西安区域赛H 贪心+线段树优化

    题意 等价于给一个数列,每次对一个长度为$K$的连续区间减一 为最多操作多少次 题解: 看样例猜的贪心,10分钟敲了个线段树就交了... 从1开始,找$[i,i+K]$区间的最小值,然后区间减去最小值 ...

  5. 银川区域赛现场赛 Pot!!【线段树】

    给定两个操作: MULTIPLY L R x  区间里都乘以一个数x MAX L R : 计算区间内一个2,3,5,7个数最大值. 思路:维护4个最大值.蓝瘦. /** 有 n 个数和 5 种操作 a ...

  6. 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 ...

  7. 2017 ICPC区域赛(西安站)--- J题 LOL(DP)

    题目链接 problem description 5 friends play LOL together . Every one should BAN one character and PICK o ...

  8. 2014年亚洲区域赛北京赛区现场赛A,D,H,I,K题解(hdu5112,5115,5119,5220,5122)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...

  9. 2019ICPC区域赛(银川)总结

    2019ICPC银川 作为第一次打区域赛的我,心情异常激动,加上学校给坐飞机(事实上赶飞机很痛苦). 热身赛很难受,oj上不去,写AC自动机输入没写好.. 现场赛,开场直觉倒着看,发现签到.然后看B, ...

随机推荐

  1. 从零学React Native之03页面导航

    之前我们介绍了RN相关的知识: 是时候了解React Native了 从零学React Native之01创建第一个程序 从零学React Native之02状态机 本篇主要介绍页面导航 上一篇文章给 ...

  2. 逆序对(POJ2299 Ultra-QuickSort)

    #include<bits/stdc++.h> using namespace std; int n; ],b[],ans;//a为待排序数组,b为临时数组,ans为逆序对数 void m ...

  3. iOS学习--详解UIView的 contentStretch属性

    通过实例和图片理解UIView的contentStretch属性 方法 通过一个图片建立一个简单的UIImageView 设置它的contentStretch属性 修改它的frame属性 观察 测试用 ...

  4. 网站的域名带www的和不带www的有什么区别呀

    国内用户习惯用www,不过默认的不带www的域名要好过带www的,带Www的是二级域名,不带的是顶级域名,默认的在搜索引擎中得权重会比较高 区别就在于一个带www一个不带www 其他都一样.www的域 ...

  5. Android Studio(八):Android Studio设置教程

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  6. OJ大集合、

    转载自:传送门 什么是OJ Online Judge系统(简称OJ)是一个在线的判题系统.用户可以在线提交程序源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性. 一 ...

  7. 永久设置anaconda的环境变量

    安装anaconda后都显示install seccessful,可是输入anaconda 终端却显示“未找到命令” 原因是没有添加环境变量,按照如下方式将环境变量添加的安装路径下: emport P ...

  8. Android本地数据存储: Reservoir

    一:前言 今天做项目,准备使用本地存储,把一些数据存在本地磁盘上,比如用户名.密码这样的.其实大家都知道,这种情况最常用的就是SharedPreferences了,我也不例外,脑子里第一个想到的就是用 ...

  9. 2019-9-2-Visual-studio-创建项目失败vstemplate

    title author date CreateTime categories Visual studio 创建项目失败vstemplate lindexi 2019-09-02 12:57:38 + ...

  10. mybatis 逆向工程(通过数据库表针对单表自动生成mybatis执行所需要的代码)

    mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java.mapper.xml.pojo…),可以让程序员 ...