题意:N个点M条边的无向图,每条边都有属于自己的编号,如果一条路径上的边编号都相同,那么花费仅为1;改变至不同编号的路径,花费加1,无论这个编号之前是否走过。

分析:记录每个点的最小花费,再用set维护这个最小花费对应的前驱边的编号,可能有多个不同的前驱编号。如果当前状态可以更新点最小花费,那么将set清空并加入前驱编号;如果与最小花费相等且前驱的编号不在集合中,那么将前驱的状态加入集合中。

*BFS要用优先队列,否则会错。

#include<bits/stdc++.h>
using namespace std;
const int maxn =1e5+;
const int INF = 0x3f3f3f3f;
struct Edge{
int v,id,next;
}edges[maxn<<];
int head[maxn],tot;
int d[maxn];
set<int> sta[maxn]; void init()
{
tot=;
memset(head,-,sizeof(head));
} void AddEdge(int u,int v,int id)
{
edges[tot] = (Edge){v,id,head[u]};
head[u] = tot++;
} struct Node{
int val,u;
int pre,fa;
bool operator <(const Node &p) const{return val>p.val;}
};
void BFS(int s,int t)
{
memset(d,INF,sizeof(d));
d[s] = ;
priority_queue<Node> Q;
Q.push((Node){d[s],s,-,-});
while(!Q.empty()){
Node x= Q.top();Q.pop();
int pre = x.pre, u = x.u;
if(x.val> d[u]) continue;
else if(x.val==d[u]){
bool tag = true;
if(sta[u].find(pre)!=sta[u].end())
continue;
sta[u].insert(pre);
}
else{
d[u] = x.val;
sta[u].clear();
sta[u].insert(pre);
} for(int i=head[u];~i;i=edges[i].next){
int v = edges[i].v,now = edges[i].id;
if(v==x.fa) continue; //反向边
if((d[u]+(pre!=now))<=d[v]){
d[v] = d[u] + (pre!=now);
if(v!=t) Q.push((Node){d[v],v,now,x.u});
}
}
}
} int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int N,M;
int u,v,id;
while(scanf("%d%d",&N,&M)==){
for(int i=;i<=N;++i) sta[i].clear();
init();
while(M--){
scanf("%d%d%d",&u,&v,&id);
AddEdge(u,v,id);
AddEdge(v,u,id);
}
BFS(,N);
if(d[N]==INF) d[N]=-;
printf("%d\n",d[N]);
}
return ;
}

HDU - 6386 Age of Moyu 2018 Multi-University Training Contest 7 (Dijkstra变型)的更多相关文章

  1. HDU 6386 Age of Moyu 【BFS + 优先队列优化】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6386 Age of Moyu Time Limit: 5000/2500 MS (Java/Others ...

  2. HDU 6386 Age of Moyu

    Problem Description Mr.Quin love fishes so much and Mr.Quin’s city has a nautical system,consisiting ...

  3. hdu 6386 Age of Moyu (重边判断)

    本来用一个map判重边结果T了, 实际上可以直接给边上打标记即可 int n, m; struct _ {int to,w,vis;}; vector<_> g[N]; int dis[N ...

  4. HDU - 6386 Age of Moyu (双端队列+bfs)

    题目链接 双端队列跑边,颜色相同的边之间的花费为0,放进队首:不同的花费为1,放进队尾. 用Dijkstra+常数优化也能过 #include<bits/stdc++.h> using n ...

  5. HDU 6386 Age of Moyu (最短路+set)

    <题目链接> 题目大意:给定一张无向图,有n个点m条边,从一条边到另一条边,如果两边的指不同 花费就要+1,如果相同就不需要花费. 先从1走到n问最小花费是多少.(第一条边的花费都是1) ...

  6. HDU 6141 - I am your Father! | 2017 Multi-University Training Contest 8

    思路来自 FXXL 最小树形图模板用kuangbin的 /* HDU 6141 - I am your Father! [ 最小树形图 ] | 2017 Multi-University Traini ...

  7. HDU 4946 Area of Mushroom(2014 Multi-University Training Contest 8)

    思路: 只有速度最大才有可能为1,速度不是最大肯定为0,那么就是 只需要操作那些速度最大的点,这些点求一个凸包,判断一下是不是在凸包边上即可. 有几个需要注意的地方: 1.最大速度如果为0   那么肯 ...

  8. HDU 4939 Stupid Tower Defense (2014 Multi-University Training Contest 7)

    思路:首先红色肯定要放在最后面.前面蓝色和绿色dp求解. dp[i][j]  表示前面(i+j) 个 有 i 个蓝色塔  j个绿色塔 能造成最大伤害. //====================== ...

  9. HDU 4913 Least common multiple(2014 Multi-University Training Contest 5)

    题意:求所有自己的最小公倍数的和. 该集合是  2^ai  * 3^bi 思路:线段树. 线段树中存的是  [3^b * f(b)]   f(b)表示 因子3 的最小公倍数3的部分  为 3^b的个数 ...

随机推荐

  1. 转载:Faster-RCNN详解

    原文:http://blog.csdn.net/zy1034092330/article/details/62044941 原文大神有很多经典之作,并且讲解得很透彻,建议前往,这里仅当学习使用. Fa ...

  2. 下载Ubuntu镜像

    Ubuntu最新桌面版:http://www.ubuntu.org.cn/download/desktop Ubuntu历史版本下载,只需要更改链接后面的版本号:http://releases.ubu ...

  3. oracle游标:查询并打印员工的姓名和薪水

    --查询并打印员工的姓名和薪水 --set serveroutput on /* 1.光标的属性 %found:假设取到了记录就是true否则是false: %notfound: */ declare ...

  4. iOS开发之--storyboary下,拖拽一个tableview/collectionView/view 等,顶端下沉64个像素的处理方法

    大家可能会发现,在sb或者xib里面拖拽一个tableview/collectionview/view的,顶端会自动下沉64个像素,也就是说,运行在模拟器上去,自导航下面又自动下沉了64个像素, 那是 ...

  5. 第四篇:“ 不确定 "限制值的使用

    前言 前篇文章解释了限制值的五种类型以及获取它们的方法.但是对于其中可能不确定的类型( 45类型 ),当限制值获取函数返回-1的时候,我们无法仅通过这个函数返回值-1来判断是限制值获取失败还是限制值是 ...

  6. Configuration注解类 Bean解析顺序

    @PropertySource 加载properties @ComponentScan 扫描包 @Import 依赖的class @ImportResource 依赖的xml @Bean 创建bean ...

  7. Linux下文件属性(drwxr-xr-x)详解以及(-rwxrwxrwx=777)(转)

    权限的计算是除去第一位字母开始,权限都是三个符号为一组合,其中-表没有这个权限. drwxr-xr-x的意思解释: ls -al 得到如下列表: drwxr-xr-x 4 oracle dba 409 ...

  8. 桥梁模式(Bridge)

    桥梁模式属于结构类的设计模式,示意结构图如下:

  9. org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x160fd6f04410017 after 0ms

    dubbo报错: org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x160fd6f04410017 after ...

  10. hdu 3047 Zjnu Stadium 并查集高级应用

    Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...