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 ...
随机推荐
- (转)Linux命令之Ethtool用法详解
Linux命令之Ethtool用法详解 原文:http://www.linuxidc.com/Linux/2012-01/52669.htm Linux/Unix命令之Ethtool描述:Ethtoo ...
- Oracle ERP Interface堵住--Request Running too long time,查找Request执行的Sql
Request Running too long time 堵住了INV Manager 导致INV Interface Pending 很多笔资料 Review 发现Request 实际执行SQL ...
- Ionic开发-常用命令
$ionic start myApp [tabs | sidemenu | blank] $ionic platform add android $ionic build android $ion ...
- Linq Enumerable.Distinct方法去重
Enumerable.Distinct 方法 是常用的LINQ扩展方法,属于System.Linq的Enumerable方法,可用于去除数组.集合中的重复元素,还可以自定义去重的规则. 有两个重载方法 ...
- Spring RestTemplate实现服务间的远程调用完整代码示例
父pom: 服务提供方 pom: provider配置文件: provider启动类: provider实体类: provider Mapper: 内置了增删改查的方法 provider Servic ...
- Eclipse Debug模式和断点调试
1行号上双击,打断点:再双击,取消断点.一般想调试哪一句代码,就在哪一句和下一句打上断点. 2在要执行的class文件上(有main方法的),右键--Debug As 然后程序正常走,当走到断点时,会 ...
- js正则匹配获取文件名
//获取文件名,不带后缀 var file_name=file_path.replace(/(.*\/)*([^.]+).*/ig,"$2"); //获取文件后缀 1.var Fi ...
- jQuery中slim版本与普通版本的区别
在jQuery3中,推出了一个slim版本.slim,百度翻译:细长的; 苗条的,纤细的; 微小的; 无价值的. 区别概述: slim即简化版,比普通版本缺少Ajax和特效模块模块. 官方发布地址:h ...
- sqlserver中计算某个特殊字符在字符串中出现的位置
-- ============================================= -- Author: Evan -- Create date: 2018年3月15日10:: -- D ...
- python爬虫之路——初识数据库存储
非关系型数据库:MongoDB.关系型数据库:MySQL 关系型和非关系型的区别: 安装: 使用: 应用场景: mongoDB是一种非关系型数据库,分为四大类:键值存储数据库,列存储数据库,文档型数据 ...