模板
文章平均质量分 67
Grit_ICPC
Dielts
展开
-
HDU 3394 Railway (点双联通+圈内判边数)
大意:给定M条边,问有有多少边是不在环上(或环内)的,有多少边是有冲突的(什么是冲突?即在一个环内有多条边将环分割开,即这样的边+上环上边的总数)思路:求桥的个数比较容易处理,直接(low[v]>dfn[u]即可)主要是怎么找冲突边,我们知道他们一定在一个联通分量内,所以我们将求出的 一组联通分量拿出来,进行遍历看是否所有的连的边在当前的栈中,在的话边数++,因为是无向图,所以最后要除原创 2016-05-09 14:09:09 · 763 阅读 · 0 评论 -
zoj 3316 Game (一般图匹配带花树)
1.增广路:长度为奇数,第一条和最后一条边都是未匹配的边,增光路径是一条匹配边,一条未匹配边这样交错的路径,也叫做交错路2.二分图已经得到最大匹配当且仅当没有增广路因为如果这时候还有增广路(长度为2*k+1),其中k条匹配的边,k+1条未匹配的边,其中第一条和最后一条是未匹配的边,我们可以把原来是未匹配的(k+1)变成匹配的,原来匹配的(k)变成未匹配的,结果增加1所以二分图的匈牙利算法枚举左边的点转载 2016-04-25 10:15:52 · 604 阅读 · 0 评论 -
POJ 3070 Fibonacci (矩阵快速幂)
这里有提供了一种求解斐波那契的高效方法,矩阵来求.结果对10000取余099999999991000000000-1Sample Output0346266875#include#include#include#define mod 10000using namespace std;void so(int a[2][2],int b[2][2原创 2015-11-23 20:35:03 · 440 阅读 · 0 评论 -
矩阵快速幂求解任意初始值f1,f2及a,b的斐波那契数列
已知递推式F(n)=a*F(n-1)+b*F(n-2),给定a,b,F(0),F(1)的值以及n,求F(n)。既然初始的f1,f2是随机的所以,先构造这俩个初始的矩阵.A:f1 0 0f2 0 01 0 0B:a b c //这里没有常熟项所以c值为01 0 00 0 1这样就构造出了已知的两个初始的矩阵然后就是用系数的矩阵B与单位矩阵连乘n-1次,原创 2015-11-24 10:49:42 · 1169 阅读 · 0 评论 -
POJ 1182 食物链(加权并查集)
思路:如果比较两动物之间的关系的话,肯定需要判断一下是否有关系,然后又有什么关系,这个有什么关系的话可以用一个r[]数组表示。如果两动物有关系k==1&&r[a]!=r[b]一定是假话,k==2,那么r[a]的级别一定是r[b]之前即(r[a]+1)%3==r[b],否则是假话。如果两者没关系,那么去创建并查集f[]和r[]. 一、要合并首先要查找两者祖先,同时在查找祖先,将经过的节点原创 2016-02-24 09:35:19 · 425 阅读 · 0 评论 -
POJ 3267 The Cow Lexicon(DP单词匹配)
题目大意:给定一个长序列长度m,接着n个单词,问最少能删除多少语句中的字符使得在n个单词中选若干个,可以使得凑出当前序列。思路:既然是在序列中,删除一部分多余的单词,使得凑成选出的某些单词。所以,1、可以用dp[i]表示在i~m中能够删除序列中的最小数目(初始化DP[m]=0,从后向前匹配)。2、状态转移方程分为两种情况:a.不能够匹配(这种情况就是最坏的删除所有的从i~m的单词dp[i]=dp[i原创 2016-02-21 16:22:04 · 412 阅读 · 0 评论 -
POJ 1129 Channel Allocation(暴力搜--涂色问题)
Channel AllocationTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 13295 Accepted: 6806DescriptionWhen a radio station is broadcasting over a very large ar原创 2015-08-18 20:32:23 · 813 阅读 · 0 评论 -
POJ 1523 SPF(Tarjan 求解连通分量)
题目大意:给定的通信设备之间的关系,问有没有割点,并输出去掉割点后的连通分量的个数。思路:裸的Trajan求解割点,当某个点为割点的条件是low[v]>=dfn[u],或者是根节点且孩子的数目>=2。连通分量的个数=符合条件孩子数目+1.#include<map>#include<queue>#include<cmath>#include<iostream>#include<cstdio>原创 2016-02-19 19:51:49 · 460 阅读 · 0 评论 -
POJ 3281 Dining (dinic+拆点)
题目大意: 有n头牛,并且分别有f,d种食物和饮品。接下来是n行每行前两个数f1,d1分别是代表当前事食物和饮品的编号。求最大可能让牛得到喜欢的套餐。思路:第一次才知道什么是拆点的问题,对于此题就是为了保证牛只吃一份套餐。然后是建图问题,我们可以让牛放在食物和饮料之间并将牛拆分,注意下标!。同时将Map[i][i+n]自己和自己相连。#include#includ原创 2016-01-13 21:18:57 · 410 阅读 · 0 评论 -
数据结构实验之排序七:选课名单
数据结构实验之排序七:选课名单Time Limit: 1000MS Memory limit: 65536K题目描述随着学校规模的扩大,学生人数急剧增加,选课名单的输出也成为一个繁重的任务,我校目前有在校生3万多名,两千多门课程,请根据给定的学生选课清单输出每门课的选课学生名单。输入输入第一行给出两个正整数N( N ≤ 350原创 2015-12-27 19:01:45 · 479 阅读 · 0 评论 -
POJ 2983 Is the Information Reliable? (约束差分系统||SPFA判负权环)
题目大意:n个点,m个条信息。P 代表a在b北距离为c,V代表a,在b北至少1 问有没有冲突的信息。思路:根据a-b=c公式我们可以推出a-b<=c&&a-b>=-c,并且a-b>=1 那么对于第一个公式我们可以分别正向和逆向建图。后者单向建图。然后进行最短路如果出现负权环则代表,有冲突(可以找3组数据画出来看看)。如果没有冲突的话肯定整个图是平衡的正逆向和为0,有冲突则出现环。 那么我们可以原创 2016-01-27 16:36:39 · 452 阅读 · 0 评论 -
POJ Kaka's Matrix Travels (最大费用最大流)
题目大意:有个n*n的矩阵每个位置上有个权值,可以有K次从左上角到右下角,但每经过一次,该位置上的权值变为0,求经过的路程中最大的路权值。思路:我们可以用费用流解决,将每个点拆成两个并在两点中建立两条边,原因是为了控制每个位置上的数只能够取一次我们建立流量为1,费用为该位置的权值,并且可以经过此点若干次,那么就是另外一条边的作用了,就是流量值为inf,费用为0,然后经过画图分析可得,我原创 2016-01-24 18:43:07 · 426 阅读 · 0 评论 -
POJ 2516 Minimum Cost (最小费用最大流)
题目大意:就是有n个商家然后n行是对应每个商家对k件物品的需求量。然后m行分别代表每个供应区可以提供k件物品的数量,下面是k个n*m的矩阵代表第k个物品,从j供应区运到i需求商的费用。思路:我们可以分k次求最小费用最大流。这题挺简单的就是源点连供应区,供应区连供应商,供应商连汇点。但是注意数组一定要开大!否则可能WA。#include#include#inclu原创 2016-01-24 11:27:04 · 506 阅读 · 0 评论 -
Going Home POJ 2195 (最小费用最大流)
思路:最小费用最大流与最小割的区别就是有了一个变量记录费用的问题,并且在反向建图的时候费用为负值。在建好图之后不停的找最短路,知道到终点的时候不存在最短路时停止。求解最小费用最大流时,就是用伴随网络来更新,原理和最短路的方法更新最大流类似。边找最短路,边更新可行流。#include#include#include#include#include#include#defi原创 2016-01-22 19:36:31 · 535 阅读 · 0 评论 -
POJ 3436 ACM Computer Factory(拆点+前向星dinic)||(拆点+邻接矩阵dinic)||(不拆点+dinic))
题目大意:就是第一行两个数p,n分别代表电脑零件的个数,和有多少机器。接下来的n行每行2*p+1个数,第一个数为机器工作的效率,其余代表机器加工前和后电脑的变化,求机器一起工作的最大效率,并输出路径。思路:由于源点的流入和普通链接点的流入,可能会大于当前点的容量,因此拆点.那么,怎么再判断有多少个机器用到了呢,这就要原来机器的工作效率,和剩余网络,如果原来的工作效率大于剩余网络那么一定原创 2016-01-22 10:52:49 · 647 阅读 · 0 评论 -
POJ 1151 Atlantis(离散化)
大意:求出不重叠矩形的面积交。思路:同两个x[],y[]分别放x,y坐标,然后枚举标记所有的矩形范围。 最后两相邻点,来求面积。#include<map>#include<queue>#include<cmath>#include<cstdio>#include<stack>#include<iostream>#include<cstring>#include<algorithm>原创 2016-04-25 11:32:23 · 381 阅读 · 0 评论 -
HDU 2686 Matrix||HDU 3376 Matrix Again (拆点费用流)
大意:从(0.0)到(n-1,n-1)然后再返回起点,并且每个点只能走一次(从左上到右下走每次只能选右下方的路来走,同理右下到左上选走上的点来走),求最大点权值。思路:针对这一个来回的过程,发现起终两个点走两次,所以流量为2,每点走一次所以可以拆点i'点连接j点这样的话可以保证返回的时候拆的点之间的流量为0,因此不能通过。最后设置一个源点,一个会点,流量也为2即可。(注意:1、数组 2原创 2016-05-24 10:16:44 · 392 阅读 · 0 评论 -
(最小树形图 朱刘算法) poj 3164
大意:有向树的的最小权值和。思路:(有向树不是无向所以不能用prim做)#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>#include<limits.h>using namespace std;const int MAXN = 110;const int MAX原创 2016-04-24 17:18:16 · 488 阅读 · 0 评论 -
(最优比率生成树 )POJ 2728
题目大意是给一些点,这些点两两之间有距离,有代价。请你找出一个最小生成树, 使代价/距离最小。 最优比率生成树问题。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;const int VM=1010;const double INF=1e15;const doub原创 2016-04-24 17:31:35 · 410 阅读 · 0 评论 -
最小生成树计数 bzoj 1016
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define mod 31011using namespace std;int n,m,cnt,tot,ans=1,sum;int fa[105];struct edge{int x,y,v;}e[1005];struct data{int原创 2016-04-24 16:39:06 · 420 阅读 · 0 评论 -
HDU 2389 Rain on your Parade (HK二分图)
大意:给定时间t,并且n个人的坐标,然后有伞的坐标求最少有多少人不被淋湿。hk算法模板。#include<map>#include<queue>#include<cmath>#include<cstdio>#include<stack>#include<iostream>#include<cstring>#include<algorithm>#define ll long long原创 2016-04-24 14:08:24 · 392 阅读 · 0 评论 -
HDU 5242 Game (树上贪心|类 树链剖分)
大意:有向图给定n-1条边然后给出每个点的权值,每个点的权值只能累加一次,问从根节点走,可以走k次能累计的最大点权和。思路:本题可以进行两遍dfs操作,第一次为从叶子节点到跟节点的节点权值和。然后根据权值排序,然后根据排序后的下标,来进行第二遍dfs搜索即从当前到根节点的和。输出前k大值即可。#include #include#include#define inf原创 2016-05-08 21:16:26 · 761 阅读 · 0 评论 -
POJ 2942 Knights of the Round Table(点双联通+二分图+染色)
大意:m个关系的人之间不能再圆桌上坐在相邻的位置上。并且人数为奇数,问至少踢出多少人能够开会。思路:因为人是围着圆桌坐,所以每人的度肯定是2,即度为1和0(单独一人)的都要被踢除。那么可以抽象为点的双联通。在出现桥的时候(即度数为1)将该联通块的人都统计下来,判断是不是奇环(二分染色)(PS:说明为啥不能直接统计个数判断奇环呢?既然是点的双联通那么一定是环,是不是能够直接判断当前的人数原创 2016-05-07 21:15:10 · 760 阅读 · 0 评论 -
POJ 1985 Cow Marathon(树的直径&BFS+BFS)
大意:找出图中的相距最远两个点的距离。思路:由于从任意一个点出发找到最远的一个点,一定在相距最远两点的其中一个端点,所以两次BFS找最远距离。vector:#include<map>#include<queue>#include<cmath>#include<cstdio>#include<stack>#include<iostream>#include<cstring>#inclu原创 2016-04-22 11:04:59 · 459 阅读 · 0 评论 -
POJ 3352 Road Construction&& POJ 3177 Redundant Paths 双联通分量
大意:给定n点,和m条边的关系图中的一些边随时可能施工导致不能够通过,所以至少加多少条边才能够使得途中任意两条边联通?思路:很明显只要图中的任意两点都是两条边来链接即可。那么我们可以先缩点构建新图,然后统计出度为1的点的个数ans,那么需要加的边数就是(ans+1)/2条;#include#include#include#include#include#inclu原创 2016-05-06 14:53:53 · 626 阅读 · 0 评论 -
POJ 2175 Evacuation Plan(费用流消负环)
大意:给出N个建筑物的坐标和里面的人数。给出M个防空洞的坐标和能容纳的人数。一个人的花费定义为从他的建筑物到目标防空洞的曼哈顿距离再加1。现在有人已经设计了一个避难方案。要你判断他给出的方案是否是所有人花费最少的解决方案,如果不是,请给出一个花费更小的解决方案(不必是最优)。思路:我们可以把,负环中的所有点找到,然后跑费用流,输出残余网络。#include #include#i原创 2016-05-30 17:46:07 · 746 阅读 · 0 评论 -
HDU HDU 2255 奔小康赚大钱 (KM最大权)
KM模板:#include<map>#include<queue>#include<cmath>#include<cstdio>#include<stack>#include<iostream>#include<cstring>#include<algorithm>#define ll long long#define inf 0x3f3f3f3f#define eps 1e-8原创 2016-04-19 17:56:04 · 351 阅读 · 0 评论 -
ACdream 1171 Matrix sum (有界费用流)
Descriptionsweet和zero在玩矩阵游戏,sweet画了一个N * M的矩阵,矩阵的每个格子有一个整数。zero给出N个数Ki,和M个数Kj,zero要求sweet选出一些数,满足从第 i 行至少选出了Ki个数,第j列至少选出了Kj个数。 这些数之和就是sweet要付给zero的糖果数。sweet想知道他至少要给zero多少个糖果,您能帮他做出一个最优策略吗?原创 2016-05-26 19:37:29 · 361 阅读 · 0 评论 -
HDU 4067 Random Maze (最小费用最大流)
#include #include#include#include#include#include#include#include#define inf 0x3f3f3f3f#define LL __int64using namespace std;const int N = 8000;int sum,head[N],cost,flow,cnt;struct node{原创 2016-05-25 11:36:09 · 363 阅读 · 0 评论 -
HDU 4862 Jump (最大费用流 | 经典建图)
题目大意:有n*m个方格,每个方格都一个的十进制一位的数。你可以操作K次。对于每一次操作,你可以选择一个出发点向下或向右Jump。跳的花费是|x1-x2|+|y1-y2|-1的能量 。如果你跳的这两个位置上数字相同,那么你就会获得数字表示的能量值。对于每一次操作,你可以这样跳任意次 ,但是每个位置只能经过一次在这K次操作中。初始能量值是0,当操作完成后,如果n*m个原创 2016-05-25 09:30:25 · 412 阅读 · 0 评论 -
POJ2186 Popular Cows (强连通缩点)
大意:给定n头牛,牛之间为有向的羡慕关系并且关系可以传递,问最后有多少个牛被所有的牛羡慕。思路:羡慕的关系链或者环都可以进行缩点,使得图抽象DAG(有向无环图)。每个节点就是一个联通分量,我们统计每个联通分量的出度,当出度为0的连通分量数目大于1时就表明不是所以牛都羡慕其中的一头牛,结果为0。否则,我们直接找到最后缩点后的图中有多少个点就是最终的结果。#in原创 2016-05-04 18:02:54 · 413 阅读 · 0 评论 -
HDU 1698 Just a Hook(线段树的区间更新《标记》)
题目大意:首先区间1-N的数都是1,然后让你把区间a-b的值改变为c;思路:裸的区间更新。比单点更新就是多了一个标记的la[]数组,用来代表在某个区间的数需要给便成la[],其具体的用法就是,在创建线段树的同时要la[]数组清空。在区间改变时将改变的量赋值给la[],然后把la[]数组下放对于此题,是将所有la[]的左右孩子都直接改变为la[]的值即可。然后改变左右孩子的sum[],有原创 2015-12-03 20:52:14 · 393 阅读 · 0 评论 -
POJ3250 Bad Hair Day(单调栈)
思路:和上题目类似,在最后一个数后设置一个哨兵即可。每次多计算一头牛,所以最后还要删去。#include#include#include#include#include#include#include#include#include#define L1 long long#define L2 __int64#define inf 0x3f3f3f3fusing原创 2016-01-04 20:53:10 · 393 阅读 · 0 评论 -
POJ A Simple Problem with Integers 3468(线段树区间更新)
注意在查询的时候还要进行更新。#include#include#include#include#include#include#define LL long long#define inf 0x3f3f3f3f#define ls l,mid,rt<<1#define rs mid+1,r,rt<<1|1LL n,sum[1000100],la[1000100];原创 2015-12-03 23:31:03 · 424 阅读 · 0 评论 -
HDOJ 1272 小希的迷宫(并查集判环+判联通块)
Online JudgeOnline ExerciseOnline TeachingOnline ContestsExercise AuthorF.A.QHand In HandOnline AcmersForum | DiscussStatistical ChartsProblem ArchiveRealtime Judge Statu原创 2015-09-18 15:23:35 · 840 阅读 · 0 评论 -
POJ 1988 Cube Stacking(带权并查集)
思路:就是带权并查集的模板.#include#include#include#include#include#include#include#include#define ll long long#define inf 0x3f3f3f3fusing namespace std;int f[1000000],Rank[1000000],num[1000000];原创 2015-10-07 11:20:20 · 445 阅读 · 0 评论 -
uva 7008 The 2014 ACM-ICPC Asia Mudanjiang Regional Contest 【部分题解】
这题刚上来反应像是二分图但是,自己水平太渣又感觉和之前的二分不同,但是的确时二分图(- -! 一变化就不认识了).注意此题的储存方式用前向星,对于二分图都是点与点之间的关系所以将直线和曲线都要转化为两种集合的形式.那么一种是比值的形式一种是,半径的形式,毕竟不是规律的点对点,所以借助map容器来进行将浮点转化为整数的形式 #include #include #include #i原创 2015-10-07 21:19:39 · 481 阅读 · 0 评论 -
FZU 1759 Super A^B mod C(数论+快速幂+欧拉函数)
思路:刚开始想直接用JAVA大数处理但是,由于再pow()中不能是大整数形的.后来才知道有个相当于降幂公式A^(B%oural(c)+oural(c))%c=A^B%c.#include #include #include #include #include #include #include #include using namespace std;typede原创 2015-10-06 20:55:46 · 446 阅读 · 0 评论 -
HDOJ 1811 Rank of Tetris(拓扑+并查集)
这道题WA了两天 - - !思路:首先分析以下什么情况下才能OK(当然时可以判断出顺序的情况下), CONFLICT(1就是存在等号并且有再>或 UNCERTAIN(当入度为0 的个数>1{其中有两部分1,在开始压队列的时候判断一次,2再队列中删除度后再判断一次} )#include#include#include#include#incl原创 2015-10-05 20:11:25 · 421 阅读 · 0 评论 -
(莫比乌斯模板abcd区间)
题目大意:给定两个区间ab与cd问两区间内能有多少组数据组成GCD(x,y)=k;每行五个整数a,b,c,d,k(1 。#include#include#include#include#include#include#define ll long long#define MAX 1000010bool vis[1000010];ll prime[1000010],原创 2015-09-16 20:32:50 · 474 阅读 · 0 评论