- 博客(21)
- 资源 (1)
- 收藏
- 关注
原创 Tarjan(无向图双联通分量)——hihoCoder 1184
题目链接: https://hihocoder.com/problemset/problem/1184分析: 给出一个N个点,M条边的无向图,求出其最小双联通分量的个数,每个双联通分量用其中点的最小序号表示。题解: 双联通分量的个数 = 无向图中割边的数量计算一个双联通分量里的点,用一个stack来存储再标记AC代码:/*********************************
2016-10-15 21:45:30 555
原创 求割点割边——hihoCoder 1183
题目链接: https://hihocoder.com/problemset/problem/1183分析: 给出一个无向图,求出图中的所有割点和割边。题解: 从任意点开始Tarjan, 设置一个父亲数组表示当前节点的根节点,和一个标记数组表示该节点有没有被Tarjan。然后开始DFS搜索遍历。割点: ①对根节点u,若其有两棵或两棵以上的子树,则该根节点u为割点。 ②对非叶子节点u(
2016-10-15 12:06:17 387
原创 最大流最小割——hihoCoder 1378
题目链接: https://hihocoder.com/problemset/problem/1378分析: 给出一个已经建立好的网络流图,这个图中的点被最小割分成两个部分S集合(包括源点)和T集合(包括汇点)题解: 先跑一边最大流,然后从源点开始BFS,如果搜到有边的容量还有剩余就加入S集合。因为最小割的边一定是满流的。AC代码:/**************************
2016-10-11 19:15:28 420
原创 DP+最小割——Intel Code Challenge Final Round (div.1 + div.2 combined) E
题目链接: http://codeforces.com/contest/724分析: 给出N个城市,每个城市有一个生产量P[i],和一个销售量S[i],然后可以从序号小的城市往序号大的城市运输货物,每对城市只能运输一次,每次最多运c个单位的货物。求最大交易量。题解: 我们很容易想到网络流建图然后跑一遍最大流求解,但是这个图里边的数量太多,肯定会MLE和TLE。因为最大流等于最小割,所以我们
2016-10-10 22:31:23 363
原创 最大权闭合子图——hiho 119周
题目链接: https://hihocoder.com/contest/hiho119/problem/1分析: 给出N个同学,每个同学有一个活力值;给出M项活动,每一个活动也有一个活力值,每一个活动需要k名指定同学参加才能成功举办。每选择一个同学参加活动,则需要耗费这个同学的活力值;每成功举办一个活动,则可以得到这个活动的活力值,求问最大能获得多少活力值。题解:最大权闭合子图: 就是给定
2016-10-09 16:52:59 348
原创 图论点、边集和二分图的相关概念和性质
参考链接: http://dsqiu.iteye.com/blog/1689505概念:最小点覆盖: 点覆盖集即一个点集,使得所有边至少有一个端点在集合里。或者说是“点” 覆盖了所有“边”。最小点覆盖(minimum vertex covering)就是点最少的点覆盖。最小边覆盖: 边覆盖集即一个边集,使得所有点都与集合里的边邻接。或者说是“边” 覆盖了所有“点”。最小边覆盖(minimum
2016-10-09 12:12:16 1038
原创 树形DP——hiho 1055
题目链接: https://hihocoder.com/problemset/problem/1055分析: 给粗一棵N个节点的树,一共N-1条边,每个节点都有其价值,要求从种选出互相连接的M个节点(包括节点1)使得其价值和最大。题解: 设dp[i][j]为第i个节点下的选择j个节点时(包括第i个节点)的最大价值。我们先把每一个dp[i][1]都初始化每个节点自己的价值,表示单独选择i节点
2016-10-07 15:44:21 572 1
原创 树的直径(图中最长路)——hiho 1050
题目链接: https://hihocoder.com/problemset/problem/1050分析: 给出一棵树,求出这棵树的直径(即最长的路)。 PS:每两个点之间只有一条边。题解: 任意从一点开始DFS,找到它能到达的最远点,这一点肯定是树直径上的一个端点,再从这一点开始进行DFS,直到最远点,记录下中间的距离,这个最远点就是树的直径的另一个端点,这个距离即树的直径。AC代码
2016-10-07 14:12:58 836
原创 双端队列+与非运算——Basic Data Structure ( HDU 5929 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5929分析: 实现一个数据结构,能够满足如下四种操作: PUSH:把一个元素( 0 or 1 )放入栈的顶部。 POP:删除栈顶的一个元素( 只会在栈不为空的时候进行 ) REVERSE:翻转整个栈 QUERY:做操作 atopNANDatop−1NAND....NANDa1a_{top}
2016-10-07 11:07:05 688
原创 欧拉回路——John's trip ( POJ 1041 )
题目链接: http://poj.org/problem?id=1041分析: 一共最多44个路口,1995个街道,每次给出x,y,z表示x路口和y路口由z街道相连接,第一行给出的两个路口里最小的为起点,并且每条路口最多走一次。求从起点出发,能否走遍左右路口,若能则输出路径即街道序号(要求字典序最小)题解: 这是一道很明显的欧拉回路,并且是无向边。判定:无向边直接记录度数,如果有度数为奇数
2016-10-05 19:21:00 458
原创 混合图求欧拉回路——Sightseeing tour ( POJ 1637 )
题目链接: http://poj.org/problem?id=1637分析: 给出N个点,M条边(有向或者无向),求这个图里是否存在欧拉回路。题解:一般图欧拉回路判定无向图: 每个点的度数都是偶数。有向图: 每个点的入度等于出度。混合图欧拉回路判定判定度数: 记录入度和出度的时候,对无向边任意定向。 如果存在欧拉回路,那么可以得到每个点入度与出度之差为偶数,否则就一定不能构成。网络流
2016-10-05 16:56:02 348
原创 2-SAT (染色法)—— Peaceful Commission (HDU 1814)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1814分析: 给出N个党派,每个党派有2i-1和2i两个代表,每一组里只能有一个党的一个带包,给出M对代表间的矛盾关系,求将这2N个党派分别分成N个人一组,输出字典序号最小的一组解。题解: 对立关系:党派中两个代表矛盾关系:给出的M对关系建边: 若a与b矛盾,建边:a->~b,b->~a。然后
2016-10-04 22:14:29 555
原创 2-SAT ( Tarjan )——Wedding (POJ 3648)
题目链接: http://poj.org/problem?id=3648分析: 给出N对夫妇,标号从0~(N-1),标号为0的夫妻为新娘和新郎,丈夫和妻子不能在同一侧,再给出M对关系,有关系的人不能同时坐在新娘的对面。题解: 对立关系:夫妻关系a与~a矛盾关系:如果挑选了人a在新娘对面,那么与他有关系的人b 一定 不能在新娘的对面,所以只能挑选~b在新娘对面。建边: 根据矛盾关系建立 a-
2016-10-04 21:20:23 419
原创 2-SAT(Tarjan)—— Get Luffy Out *(HDU 1816)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1816分析: 和POJ 2723差不多,不过每把钥匙可以属于多个组了。题解:对立关系:一把钥匙用或者不用矛盾关系:如果一扇门上的一把锁不能被打开,那么另外一把锁肯定能被打开。一个钥匙被使用,和它同组的钥匙就肯定不能被使用根据矛盾关系建边,根据对立关系判断有无解。AC代码: /*********
2016-10-03 16:42:05 383
原创 2-SAT ( Tarjan )——Get Luffy out ( POJ 2723 )
题目链接: http://poj.org/problem?id=2723分析: 给出2N把钥匙,一共分成 N 对,每一对钥匙只能用其中一把,再出M扇门,每扇门有两把锁,每把锁单独对应一把钥匙,打开一把锁就能打开一扇门,除开第一扇门外,想打开某扇门,必须先打开它前面那一扇。求在给定的条件下,最多能打开多少扇门。题解: 每一对钥匙只能用其中一把,这也是一道很明显的2-SAT问题。用一个一维数组
2016-10-03 14:44:51 375
原创 2-SAT (Tarjan)—— Katu Puzzle ( POJ 3678 )
题目链接: http://poj.org/problem?id=3678分析: 给出N个数字,值可以为0或者1,然后给出M个操作,每个操作对第a个数和第b个数进行 AND/OR/XOR 操作,并且结果要等于c。问这M个操作能否成功进行。题解: N个数,每个数可以为0(x)或者1(~x),这是一道很明显的2-SAT,但是怎么建边呢。 题中给出了M个操作,我们一一分析一下。 AND:若值为1
2016-10-03 11:30:34 368
原创 2-SAT ( Tarjan )——POJ 3207
题目链接: http://poj.org/problem?id=3207分析: 一个环上按顺序标上1-N个点,给出M条边,可以从圆外连接,也可以从圆内连接,求连接所有的边是否能够保证都不相交。题解: 每条边有两个状态,只能2选一,要么圆外,要么圆内,所以我们以m条边为点建图,若两条边在同一侧会相交,我们就建边。AC代码:/********************************
2016-10-02 21:53:58 276
原创 最小路径覆盖——hihoCoder 118
题目链接: https://hihocoder.com/contest/hiho118/problem/1分析: 一共有N个旅游景点(编号1..N),由M条单向路线连接。游览线路保证是没有环路的。每一个调查团可以从任意一个景点出发,沿着计划好的游览线路依次调查。每个景点只会有一个调查团经过,不会被重复调查。求所需要的最小调查团数。题解: 将这个问题转换为二分图匹配来做:路径的性质:起点的入
2016-10-02 14:42:06 845
原创 并查集——Destroying Array(Intel Code Challenge Elimination Round C)
题目链接: http://codeforces.com/contest/722/problem/C分析: 给出一个数组,n个元素,给出一个删除顺序,包含n个数字,不重复,且范围在[1, n],求每一步删除后,输出分开的每一段数组里和最大的。题解: 一开始想用线段树,但无奈数据结构学得不好,所以又想了一会,感觉把删除操作去掉有点并查集的味道,然后开始并查集胡搞。教训: 本来可以比赛时间AC
2016-10-02 01:11:37 388
原创 最短路(建图)—— Meeting (HDU 5521)
题目链接: http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1013&cid=645分析: 给出 N 个点,给出M个集合,每个集合里的点可以互相抵达且耗时为tit_i,现在分别从1和n点出发,求在哪个点相遇耗时最小,若有多个解,则按递增序列输出题解: 若是每个点直接建边,来两发SPFA,肯定T到生活不能自理,因为这个图的
2016-10-01 19:37:10 356
原创 字符串匹配(strstr)—— Bazinga ( HDU 5510 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5521分析: 给出n个字符串,按顺序标上label:1-n,求label最大的字符串并且满足在它之前至少存在一个字符串不不是它的子串题解: Get一个新的函数:strstr(char * str1, char * str2)返回值:若str2是str1的子串,则返回str2在str1的首次出
2016-10-01 15:02:15 479
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人