图论
最菜的acmer
这个作者很懒,什么都没留下…
展开
-
hdu6080(FLOYD)
题解:因为题目是给出来顺时针,任意取两个坐标h[i],h[j]时如果所有的点在他的右侧就可以有跳i->j的有向边并且路径长度为1,如果所有的点在他的左侧的时候就可以有一条j->i的边并且路径长度为1。 如果所有的点都在边上就可以建一条双向边 然后跑一边Floyd算法就可以求出以i为起点i为终点的最短路径 然后去其中的最小值ans,如果ans>m就包不了,否则m-ans就是答案#include<原创 2017-08-11 23:18:22 · 402 阅读 · 0 评论 -
hdu6166Senior Pan(spfa)
题解:因为不同的数二进制上肯定至少有一位数不同所以可以用二进制表示这位上有没有分组这样肯定每两个点之间最短路都跑过一遍。用二进制表示这位上是分成起点那一组还是终点的那一组每次跑一遍spfa即可#include<iostream>#include<cstring>#include<cstdio>#include<queue>#include<vector>#include<algorithm原创 2017-08-23 16:30:04 · 312 阅读 · 0 评论 -
hdu6181Two Paths-(次短路)
题解:就是求次最短路求1-n的次最短路就是1-x的最短路+edge[x][y]+y-n的最短路即可#include #include #include #include #include using namespace std;typedef long long int ll;const int R = 100000+5;const int INF = 0x3f3f3f3f原创 2017-08-24 18:16:44 · 748 阅读 · 1 评论 -
HDU3247-(AC自动机+spfa+状压dp)
题意:给你n个资源串和m个病毒串然后让你求最少需要多少个01字符才能做出不含病毒串并且含有所有的资源串的字符串题解:先跑一边AC自动机然后求出所有结点是资源串的结尾但是不是病毒串的结尾的结点,最后求这些结点到其他结点的最短距离,注意的是初始是空串所有0那个结点也要算进去,因为结点对应的数值很大但是满足条件的很少所以我们要给满足条件的结点重新编号,最后就是二维dp(第一维表示含有哪几个资源串,第原创 2017-10-01 15:44:47 · 464 阅读 · 0 评论 -
HDU - 4076(spfa)
题意:有n*m个点,每一点可以向四个方向走,有些点是墓地不能走,有些点是山洞,当你走到该点时会传送到另外一点,所花费的时间有可能是个正数也可能是个负数也可能是0。起点是(0,0),目的地是(n-1,m-1),题目保证起点和终点不会是墓地也不会是山洞。如果有可能永远都到达不了终点也就是该图存在负权回路,输出Never;否则输出需最少的花费时间或者Impossible;题解: 用优先队列走原创 2018-02-11 14:18:20 · 194 阅读 · 0 评论 -
wannafly挑战赛12E题
题解:因为gcd(a,b)最大就只有1W所以我们可以维护一下到达0~gcd(a,b)-1需要的最小代价,我们可以用spfa求最短路径那样求因为我们加一个s[i]就变到另外一个值就相当于路径的权值是v[i],接着我们跑完之后,当然我们同时维护如果代价相等的时候我们要取小子序列,最后维护完之后我们呢查找出来所有能到达的状态并且(i*10+v)%m==0的最小代价,然后我们从中选择子序列最小的一个串输出...原创 2018-03-27 21:08:14 · 134 阅读 · 0 评论