// 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 计蒜课的更多相关文章

  1. 计蒜客 18492.Upside down primes-米勒拉宾判大素数 (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 K)

    K. Upside down primes 传送门 这个题就是把大数按字符串输进去,判断一下是不是素数,然后反转180度,先判断反转之后的东西是不是一个数,如果是的话,再把这个数判一下是不是素数,如果 ...

  2. 计蒜客 18487.Divisions-大数的所有因子个数-Miller_Rabin+Pollard_rho-超快的(大数质因解+因子个数求解公式) (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 F)

    这一场两个和大数有关的题目,都用到了米勒拉宾算法,有点东西,备忘一下. 题目传送门 F. Divisions 传送门 这个题是求一个数的所有因子个数,但是数据比较大,1e18,所以是大数的题目,正常的 ...

  3. 计蒜客 18488.Extreme Sort (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 E)

    E.Extreme Sort 传送门 代码: #include<iostream> #include<cstdio> #include<cstring> #incl ...

  4. German Collegiate Programming Contest 2015

    // Legacy Code #include <iostream> #include <cstdio> #include <cstring> #include & ...

  5. German Collegiate Programming Contest 2015(第三场)

    Divisions David is a young boy and he loves numbers. Recently he learned how to divide two numbers.D ...

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

  7. 2018 German Collegiate Programming Contest (GCPC 18)

    2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...

  8. (寒假开黑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 ...

  9. (寒假GYM开黑)2018 German Collegiate Programming Contest (GCPC 18)

    layout: post title: 2018 German Collegiate Programming Contest (GCPC 18) author: "luowentaoaa&q ...

随机推荐

  1. FirstAFNetWorking

    // ViewController.h // FirstAFNetWorking // // Created by 张国锋 on 15/7/20. // Copyright (c) 2015年 张国锋 ...

  2. Unity3d网格合并

    几个不同的物体,在Unity3d中可以将网格合并在一起,用于优化. 在Unity3d中构建临时场景如下:建一C#脚本名为"CombineMeshes",挂在Cube上. Combi ...

  3. JFrame Frame 窗口关闭

    JFrame是Frame的子类,即JFrame继承自Frame. JFrame是javax.swing.JFrame的类,Frame是java.awt.Frame的类. 类似的还有JButton.Bu ...

  4. vue2.0:(五)、路由vue-router

    好的,接下来,我们来写路由.用的是vue2.0的路由. 步骤一:配置main.js import Vue from 'vue'; import App from './App'; import rou ...

  5. SQL SERVER 2014 缺少Business Intelligence 解决办法

    SQL SERVER 2014安装完所有的数据库工具后,缺少开发工具 Business Intelligence   之解决办法. https://msdn.microsoft.com/en-us/l ...

  6. Windows 8 / win8 拼音输入法/搜狗输入法 visual Studio 2010 / VS2010 不兼容

    是visual assist X 的问题,更新到VA_X_Setup 2001 解决问题 老版本处理:Tools-->Extension Manager-->Uninstall

  7. Eucalyptus——EC2的开源实现(转载)

    Eucalyptus[22]是加利福尼亚大学的 Daniel Nurmi 等人实现的,是一个用于实现云计算的开源软件基础设施.Eucalyptus 是 Amazon EC2 的一个开源实现,它与 EC ...

  8. 一、git提交代码步骤

    git add .   //添加到本地缓存区 git commit -m '备注 ' //提交代码到本地仓库 git push  //将本地代码推送到develop分支上 git checkout m ...

  9. OpenCascade:Topo类型转换

    OpenCascade:Topo类型转换 TopoDS_Edge newEdge; if (oldShape.ShapeType()==TopAbs_EDGE) newEdge=TopoDS::Edg ...

  10. DROP OPERATOR CLASS - 删除一个操作符类

    SYNOPSIS DROP OPERATOR CLASS name USING index_method [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP OPER ...