HDU 6386 Age of Moyu (最短路+set)】的更多相关文章

<题目链接> 题目大意:给定一张无向图,有n个点m条边,从一条边到另一条边,如果两边的指不同 花费就要+1,如果相同就不需要花费. 先从1走到n问最小花费是多少.(第一条边的花费都是1) 解题分析: 开始还以为类似于Dijkstra这样的贪心过程是伪的,但是本题确实是dijkstra,不过需要进行一些巧妙的变形,用一个set记录到达每个点的最优花费的所有的路径的前一条边(因为到达一个点的最优路径可能有多条),主要用于判断下一步花费是否需要+1. //set[u]表示当前的u距离最短时,u的前一…
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6386 Age of Moyu Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 3821    Accepted Submission(s): 1214 Problem Description Mr.Quin love fishes so m…
Problem Description Mr.Quin love fishes so much and Mr.Quin’s city has a nautical system,consisiting of N ports and M shipping lines. The ports are numbered 1 to N. Each line is occupied by a Weitian. Each Weitian has an identification number. The i-…
本来用一个map判重边结果T了, 实际上可以直接给边上打标记即可 int n, m; struct _ {int to,w,vis;}; vector<_> g[N]; int dis[N]; queue<int> q; void dfs(int x, int c, int d) { dis[x] = d, q.push(x); for (auto &e:g[x]) if (!e.vis&&e.w==c) { e.vis = 1; if (dis[e.to]…
题意:N个点M条边的无向图,每条边都有属于自己的编号,如果一条路径上的边编号都相同,那么花费仅为1:改变至不同编号的路径,花费加1,无论这个编号之前是否走过. 分析:记录每个点的最小花费,再用set维护这个最小花费对应的前驱边的编号,可能有多个不同的前驱编号.如果当前状态可以更新点最小花费,那么将set清空并加入前驱编号:如果与最小花费相等且前驱的编号不在集合中,那么将前驱的状态加入集合中. *BFS要用优先队列,否则会错. #include<bits/stdc++.h> using name…
题目链接 双端队列跑边,颜色相同的边之间的花费为0,放进队首:不同的花费为1,放进队尾. 用Dijkstra+常数优化也能过 #include<bits/stdc++.h> using namespace std; typedef long long ll; ,mod=1e9+; int n,m,hd[N],ne,dp[N]; struct E {int v,c,nxt;} e[N]; void addedge(int u,int v,int c) {e[ne]= {v,c,hd[u]},hd…
http://acm.hdu.edu.cn/showproblem.php?pid=6395 Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1475    Accepted Submission(s): 539 Problem Description Let us define a sequence as belo…
Age of Moyu Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 3125    Accepted Submission(s): 981 Problem Description Mr.Quin love fishes so much and Mr.Quin's city has a nautical system,consis…
给出n和点,m条边,每条边有各自的标号,进入第一个标号需要消耗1的费用,此后转换标号需要1费用,在同一个标号上走不需要费用.问你从1到n最少需要多少费用. 最短路变形,把第一个点看成不存在的标号,然后从第一个点开始走,然后就是dijkstra了...当时没好好学dij的优化,当场的时候没加堆优化,乱T.... #include<map> #include<set> #include<ctime> #include<cmath> #include<sta…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5637 题意: http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=675&pid=1003 题解: 令n=(1<<17)-1. 首先很容易想到建图,跑最短路,不过有多次查询,如果每次都跑最短路的话要m*n*logn,会t. 所以可能是我们模型建的太一般化了,需要考虑题目的特殊性. s到t的最少变化次数本质…