German Collegiate Programming Contest 2015 计蒜课
// Change of Scenery
1 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <utility>
#include <queue>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
int n,m,k;
const int N=;
const ll inf=1e10+;
const ll mod=1e9+;
struct Node{
int to;
ll w;
Node(){}
Node(int TO,ll W){
to=TO;
w=W;
}
};
vector<Node>vec[N];
int prenum[N];
ll dis[N];
void bfs(int sta){
priority_queue<P,vector<P>,greater<P> >que;
dis[sta]=;
prenum[sta]=;
que.push(P(,sta));
while(!que.empty())
{
P q=que.top();
que.pop();
int v=q.second;
if(dis[v]<q.first) continue;
for(int i=;i<vec[v].size();i++){
Node Nod=vec[v][i];
int t=Nod.to;
if(dis[t]>dis[v]+Nod.w){
dis[t]=dis[v]+Nod.w;
prenum[t]=prenum[v];
que.push(P(dis[t],t));
}
else if(dis[t]==dis[v]+Nod.w){
prenum[t]=(prenum[t]+prenum[v])%mod;//关键点
//本题的路径数目可能很多,long long 也不一定满足,因为路径数目用的是
//乘法原理,因此要取余
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
int xx;
for(int i=;i<k;i++){
scanf("%d",&xx);
}
int x,y;
ll z;
for(int i=;i<m;i++){
scanf("%d%d%lld",&x,&y,&z);
vec[x].push_back(Node(y,z));
vec[y].push_back(Node(x,z));//这是个无向图
}
for(int i=;i<=n;i++)
dis[i]=inf;
bfs();
if(prenum[n]<){
printf("no\n");
return ;
}
else{
printf("yes\n");
}
return ;
}
// German Collegiate Programming Contest 2015 计蒜课 Change of Scenery
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <utility>
#include <queue>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
int n,m,k;
const int N=;
const ll inf=1e10+;
const ll mod=1e9+;
struct Node{
int to;
ll w;
Node(){}
Node(int TO,ll W){
to=TO;
w=W;
}
};
vector<Node>vec[N];
int prenum[N];
ll dis[N];
void bfs(int sta){
priority_queue<P,vector<P>,greater<P> >que;
dis[sta]=;
prenum[sta]=;
que.push(P(,sta));
while(!que.empty())
{
P q=que.top();
que.pop();
int v=q.second;
if(dis[v]<q.first) continue;
for(int i=;i<vec[v].size();i++){
Node Nod=vec[v][i];
int t=Nod.to;
if(dis[t]>dis[v]+Nod.w){
dis[t]=dis[v]+Nod.w;
prenum[t]=prenum[v];
que.push(P(dis[t],t));
}
else if(dis[t]==dis[v]+Nod.w){
prenum[t]=(prenum[t]+prenum[v])%mod;//关键点
//本题的路径数目可能很多,long long 也不一定满足,因为路径数目用的是
//乘法原理,因此要取余
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
int xx;
for(int i=;i<k;i++){
scanf("%d",&xx);
}
int x,y;
ll z;
for(int i=;i<m;i++){
scanf("%d%d%lld",&x,&y,&z);
vec[x].push_back(Node(y,z));
vec[y].push_back(Node(x,z));//这是个无向图
}
for(int i=;i<=n;i++)
dis[i]=inf;
bfs();
if(prenum[n]<){
printf("no\n");
return ;
}
else{
printf("yes\n");
}
return ;
}
German Collegiate Programming Contest 2015 计蒜课的更多相关文章
- 计蒜客 18492.Upside down primes-米勒拉宾判大素数 (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 K)
K. Upside down primes 传送门 这个题就是把大数按字符串输进去,判断一下是不是素数,然后反转180度,先判断反转之后的东西是不是一个数,如果是的话,再把这个数判一下是不是素数,如果 ...
- 计蒜客 18487.Divisions-大数的所有因子个数-Miller_Rabin+Pollard_rho-超快的(大数质因解+因子个数求解公式) (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 F)
这一场两个和大数有关的题目,都用到了米勒拉宾算法,有点东西,备忘一下. 题目传送门 F. Divisions 传送门 这个题是求一个数的所有因子个数,但是数据比较大,1e18,所以是大数的题目,正常的 ...
- 计蒜客 18488.Extreme Sort (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 E)
E.Extreme Sort 传送门 代码: #include<iostream> #include<cstdio> #include<cstring> #incl ...
- German Collegiate Programming Contest 2015
// Legacy Code #include <iostream> #include <cstdio> #include <cstring> #include & ...
- German Collegiate Programming Contest 2015(第三场)
Divisions David is a young boy and he loves numbers. Recently he learned how to divide two numbers.D ...
- 2015 German Collegiate Programming Contest (GCPC 15) + POI 10-T3(12/13)
$$2015\ German\ Collegiate\ Programming\ Contest\ (GCPC 15) + POI 10-T3$$ \(A.\ Journey\ to\ Greece\ ...
- 2018 German Collegiate Programming Contest (GCPC 18)
2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...
- (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)
layout: post title: (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017) au ...
- (寒假GYM开黑)2018 German Collegiate Programming Contest (GCPC 18)
layout: post title: 2018 German Collegiate Programming Contest (GCPC 18) author: "luowentaoaa&q ...
随机推荐
- ruby 从命令行读取文本
最常见的方式就是使用内置的get 方法,这个方法可以从命令行读取用户的输入,并在默认的情况下把读入的文本赋值给预定义变量$_. 但是get方法会保留用户在输入字符串末尾所加的换行符,当用户在输入的字符 ...
- java学习笔记(3)——对象与类(日期)
变量.类型.赋值.运算符等等: https://blog.csdn.net/common77zwq/article/details/81988676 1.概念: 面向对象程序设计OOP.类class. ...
- JAVA的API部分介绍
个人理解: Object作为最大的父类,里面存在不少方法,可以在API中具体的查找.比如可以帮助查看是否相同的equals方法,不过要想看具体属性是否相同需要得重写,打印.调用对象相当于调用其tost ...
- columns分栏与flex弹性盒模型
columns 分栏 值:column-width:设置每列的宽度 column-count:设置列数 例:columns{200px 3} 列数和宽度固定 co ...
- dubbo工作原理(3)
dubbo主要核心部件 Remoting:网络通信框架,实现了sync-over-async和request-response消息机制. RPC:一个远程过程调用的抽象,支持负载均衡.容灾和集群功能. ...
- Jenkins访问路径配置自定义的相对路径
Jenkins安装时没有配置自定义的相对访问路径,例如配置的端口是29957,那访问路径就是http://localhost:29957.以下介绍把访问路径改成http://localhost:299 ...
- 安装新版REDIS
http://redis.io/ # wget http://download.redis.io/redis-stable.tar.gz tar zxvf redis-stable.tar.gz -C ...
- win10 ,本地连接无法识别网络 ,无线正常,
win10 ,本地连接无法识别网络 ,无线正常, 电脑诊断是:“此计算机上缺少一个或者多个网络协议” 1.手动设置ip 失败 2.网卡卸载驱动 ...
- MFC【exe】工程中的文件大致信息(翻译的)
在工程文件夹中有个readme文件,下面是翻译过来的. ======================================================================== ...
- UVA11019 Matrix Matcher (AC自动机)
二维的矩阵匹配,把模式矩阵按列拆开构造AC自动机,记录行号(为了缩点判断). 把T矩阵按行匹配,一旦匹配成功,在假想的子矩阵左上角位置加一.最后统计总数. 因为所有模式串长度一样,不用维护last数组 ...