
图论
yp_2013
这个作者很懒,什么都没留下…
展开
-
hdu 5622 KK's Chemical
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=5622根据药品之间的相互关系,我们可以构建一张图,我们对相互会发生反应的药品连边这个图的特征,是一个环加上一些“树”(可能有多个联通块)一个环(1,2,3,4,5……,n)m染色的方案数:递推,设第一个点颜色为1f[I,1]表示i点颜色为1的种数,f[I,0]为颜色不为1时(不考虑n与1颜色不同)则F[原创 2016-02-07 12:48:34 · 650 阅读 · 0 评论 -
51nod 1445 变色DNA
http://www.51nod.com/onlineJudge/problemSolution.html#!problemId=1445题意: 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1,2…N-1。研究发现这只狼的基因中存在一个变色矩阵,记为colormap,如果colormap[i][j]=’Y’则这只狼可以在某一个夜晚从颜色i变成颜色j(原创 2016-02-25 09:33:44 · 363 阅读 · 0 评论 -
ccf 送货
题意:无向图输出字典序最小的欧拉路径或者回路,如果没有就输出-1. 这题着实是应该记录一下我的心路历程,比赛的时候忘记字典序了,随便套了一个板子,结果0分。。。 然后oj挂出题后开始改,写了个很sb的dfs,10分,然后发现有两个奇数节点的时候应该起点为奇数度那个,改了,20分,然后随便给一组双环的样例,发现dfs写的有问题,应该回溯,改完80分,T了,我就好奇这怎么会T,没敢想是回溯的问题,原创 2016-04-05 20:08:40 · 2081 阅读 · 1 评论 -
最近公共祖先离线加在线倍增
http://blog.youkuaiyun.com/hnust_xiehonghao/article/details/9109295 离线算法其实就是dfs加并查集,在遍历图的时候进行查询,过程中不断地更新节点的父节点的值,确实是非常巧妙的,上面那个博客有很详细的介绍和说明 http://blog.youkuaiyun.com/jarjingx/article/details/8183240 在线倍增法,这个思想很原创 2016-04-07 10:56:05 · 347 阅读 · 0 评论 -
强连通分量
最近一段时间巩固一下图论vector<int> adj[N];int low[N],dfn[N],id[N],sta[N],idx,top,scnt;//scnt从1开始bool insta[N];void tarjan(int u){ insta[u]=1; sta[top++]=u; low[u]=dfn[u]=++idx; for(int i=0;i<(int)原创 2016-04-07 10:38:31 · 412 阅读 · 0 评论 -
POJ 3592 缩点加spfa
缩点的最大好处在于把一个杂乱无章的有向图变成一个有向无环图, 而在有向无环图中,有两种点比较特殊:一种是入度为 0 的点,另一种是 出度为 0 的点。我们把入度为0的点就叫做根,出度为0的点叫做叶子!题意:一辆坦克从N*M矩阵的左上角出发,每次往右或往下走一格,每格可以是’#’(表示不可以走),’*’表示传送门,或者是数字,表示在该格可以获得的值(只能取一次),传送门可以将到达该处的坦克传送到指定位原创 2016-04-08 20:22:01 · 330 阅读 · 0 评论 -
图论专题汇总
http://www.cnblogs.com/kuangbin/p/3228371.htmlhttp://codeforces.com/contest/546/problem/E 网络流 开始刷kuangbin带你飞的各种专题 http://www.tuicool.com/articles/eEbIju 缩点的意义 http://blog.youkuaiyun.com/kk303/artic原创 2016-04-10 10:40:06 · 1749 阅读 · 0 评论 -
第四次
http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2101&pid=6题意: 狗追小偷,如果找到了他的足迹,则速度变为原来2倍,有若干个出口,问最后小偷能否顺利逃脱。 思路: 枚举每一个出口,从小偷开始bfs,如果下一个点满足条件(小偷到这个点的距离+到出口距离<狗到这个点距离+到出口距离+1 /2) 则可以转移,如果能转移到出口则可以逃脱原创 2016-03-29 09:26:45 · 351 阅读 · 0 评论 -
Codeforces 345 div1
需要注意的是先缩点再连边,然后是连缩的点,tuopu的时候要注意写法,当入度减为0后才能入队!连边的时候为了降低复杂度,所以只要相邻的一对关系连起来就可以了,这样可以串到整个图!#include<bits/stdc++.h>using namespace std;const int maxn=1e6+10;int n,m;int a[maxn],fa[maxn],b[maxn],f[maxn原创 2016-04-20 21:05:23 · 338 阅读 · 0 评论 -
hdu 4125 二叉搜索树建立与kmp
#include <set>#include <map>#include <queue>#include <stack>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <iostream>#include <limits.h>#include <string.h>#include <string>#i原创 2016-06-10 16:38:38 · 319 阅读 · 0 评论 -
hdu5889 最短路加网络流
思路:先跑一次最短路,然后把最短路上的边扔进网络流跑一次最小割就好了,和HDU3416异曲同工#include<bits/stdc++.h>using namespace std;const int maxn = 2005;#define inf 1e9#define INF 1e9const int maxm = 4000000+50;struct Node{ int v,w原创 2016-09-18 09:01:42 · 518 阅读 · 0 评论 -
ccf地铁修建
题意:无向图,从1到n的所有路径中取路径中最长的那条 比较, 然后输出值最小的那条。 当时想的是直接深搜, 记录当前路径最大值, 到n比较即可。 这样会出问题,就是从别的地方搜过来就会破坏掉原有的顺序,那么记录路径的最大值就会出现问题了。简直被自己蠢哭。放上自己比赛时的错误代码和错误例子#include <bits/stdc++.h>using namespace std;struct No原创 2017-04-02 09:38:17 · 3266 阅读 · 2 评论 -
51nod 1444 破坏道路
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1444无向图直接用广度优先搜索求出两点之间的最小距离,然后剩下的就是要去掉重复边,直接暴力。#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <string原创 2016-02-24 23:38:47 · 642 阅读 · 1 评论 -
Codeforces Round #304 (Div. 2)E. Soldier and Traveling 网络流
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1442题意:n个城市,m条边, 每个点刚开始有ai个人,问最后能不能有bi个人,每个城市的人,要么不走,要么只能走到相邻的城市 输出能否达到并输出转移方案! 思路:最大流 s-a[i]-b[i]-t建图#include<iostream>#include<cstdio>原创 2016-02-24 21:12:49 · 407 阅读 · 0 评论 -
hdu 5624 KK's Reconstruction
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=5624题意: 给出一个图,现让构造出一棵生成树使得最大权值边减去最小权值边最小。最小生成树的性质是最大边最小,那么我们先确定出生成树最小边的最大值,然后再枚举最小边,暴力找到最大边比较就可以了(中间加了一下利用答案的小减枝),生成树是用krustra方法,用并查集按照权值加边就可以了!!这道题目居然这原创 2016-02-07 14:40:52 · 627 阅读 · 0 评论 -
hdu 5294 Tricks Device
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=5294多校第一场第7题,上午Codeforces坏了,改改多校玩一玩,这道是板子题,当时我没读懂题意,哎,当时是真心菜啊!!! 题意:无向图N个点M条边,输出最少删掉几条边破坏最短路,最多删掉几条边不破坏最短路。 最多删几条边不破坏最短路的答案是M减去最短路里边数最少的那个,最少删掉几条边破坏最短路原创 2016-02-12 11:57:32 · 252 阅读 · 0 评论 -
Bestcoder Round 72# div2
http://acm.hdu.edu.cn/showproblem.php?pid=5625这道题目唯一的收获就是scanf%c,如果后面紧跟着一个scanf的话应该是加空格读入scanf("%c",&c) 与 scanf(" %c",&c),后者只是在%前多了个空格,似乎没有什么区别,但使用起来区别是很大的。scanf()作单字符输入时规定只接收一个字符,但它却把回车符也作为字符对待的。这就造成程原创 2016-02-14 00:37:39 · 331 阅读 · 0 评论 -
LightOJ 1237 KM求最大匹配最小匹配
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=9954#problem/G 题意:有一些人来咖啡馆开始时间和离开咖啡馆的时间,但是对应的顺序被打乱了,也就是说不知道每个人来的时间和离开的时间。有一个函数用来计算某人来咖啡馆所需要的费用,求最大能获得多少费用,最少能获得多少费用,还要判断数据是不是合法。思路:由于每个人对应一个开始时间和结原创 2016-03-15 21:20:01 · 370 阅读 · 0 评论 -
Codeforces 618 D Hamiltonian Spanning Tree
传送门: http://codeforces.com/problemset/problem/618/D题意: 一个图,任意两个节点之间都有边,现给出一个最小生成树,树上的权值和其余边的权值不一样,现让你构造出一条通过所有节点恰好一次的路径,问最小权值是多少?思维题: 首先经过每个点恰好一次,那么走的总边数是一定的,即n-1,那么既然边的权值只有两种,那么肯定是算出一种,然后用减法求得另外一种喽原创 2016-02-03 13:57:46 · 697 阅读 · 0 评论 -
hdu 5619 Jam's store
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=5619最小费用流题,构图的时候按照bc官方题解说得那样就OK了,即把每个修理师都拆成n个点,表示第1到第n个给谁修,每条边对应的费用通过它对答案贡献的时间来计算,比如倒数第二个,就是T[i][j]*2,包括自己修的和下一个等待的时间。然后源点向n个顾客连,n个顾客向拆出来的n*m个点连,然后这n*m个点原创 2016-02-04 23:38:04 · 467 阅读 · 0 评论 -
POJ3159 最大差距(差分约束系统)
班上有n个同学,现在有一些糖要分给他们,设第i个同学得到的糖为p[i],分糖必须满足条件:第i个同学要求第j个同学的糖不能超过自己k个,即p[j] - p[i] <= k,k >= 0。要求在满足这些条件的情况下,求出p[n] - p[1]的最大值。 由p[j] - p[i] <= k可得p[j] <= p[i] + k 在单源最短路径的算法中有一步是“若mindis[j] > mindis[i转载 2016-02-22 20:24:48 · 268 阅读 · 0 评论 -
hdu 5544 Ba Gua Zhen
http://acm.hdu.edu.cn/showproblem.php?pid=5544题意: 有一个n(<=50000)个顶点m(<=100000)条边的无向图,每条边有一个边权(0<=边权<2^60),求所有回路中边权xor和的最大值。思路: 任意选定一个起点,从起点出发开始dfs,同时记录路径xor和,每访问到一个访问过的点表明得到了一个环,将当前异或值与起点到当前点的xor和xor一原创 2016-03-08 08:47:03 · 815 阅读 · 0 评论 -
hdu 5545 The Battle of Guandu
http://acm.hdu.edu.cn/showproblem.php?pid=5545 题意: 有T(30)组数据。 对于每组数据有n(1e5)个村庄,m(1e5)个战场 对于村庄i,曹操可以选择支付c[i]*num元,(0<=c[i]<=1e5) 使得这个村庄派出num个士兵,在战场x[i]为曹操作战,在战场y[i]为袁绍作战。(1<=x[i],y[i]<=m) 然后,我们有一个原创 2016-03-08 10:07:18 · 681 阅读 · 0 评论 -
BestCoder Round #74 (div.2)
未完待续~~ 直接对新的点建图,然后flyod,最后算答案的是后6*6,枚举转折点更新答案即可!#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn=1e5+10;int a[10],dis[10][10],n,m;const ll mod=1e9+7;int main(){原创 2016-03-08 21:06:15 · 348 阅读 · 0 评论 -
51nod 1443 路径和树
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1443给定一幅无向带权连通图G = (V, E) (这里V是点集,E是边集)。从点u开始的最短路径树是这样一幅图G1 = (V, E1),其中E1是E的子集,并且在G1中,u到所有其它点的最短路径与他在G中是一样的。 现在给定一幅无向带权连通图G和一个点u。你的任务是找出从原创 2016-02-24 20:50:53 · 637 阅读 · 0 评论 -
hdu 4123 rmq与树的直径
#include <bits/stdc++.h>using namespace std;#define ll long longconst int inf = 0x7f7f7f7f;const int maxn = 5e4 + 10;deque<int> Max, Min;struct node{ int v, w; node(){} node(int _v, i原创 2016-06-10 16:41:32 · 370 阅读 · 0 评论