大三ACM - 图
Little_boy_z
这个作者很懒,什么都没留下…
展开
-
sdut2414 An interesting game 费用流
建图题因为每个新添加的小山高度都在(0-30)之间,所以我们以这31个点,也就是高度作为点S-》S’容量为k,用来表明最多添加k个S'指向31个小山,容量为每个高度小山的个数。31个小山在指向n个大山。容量为1,费用比较麻烦。原本没有这个小山时,我们是abs(a[j]-a[j-1])。我们计算的是多余的,所以要把这一块减去,再加上加上小山后的值。也就是-(abs(i-a[j])+abs(i-a[j...原创 2018-04-25 21:30:28 · 268 阅读 · 0 评论 -
poj 2175 费用流+消圈
这道题如果直接费用流会超时。题目只是让我们判断是否是最好的情况,我们只需要找到更好的一种情况即可,不需要求最好的。也就是说按照最小费用流的做法,我们只需要在残余网络还能找到一个负圈的即可。这是充分必要条件,如果达到最优解,就没有负圈了。所以我们按照题意建立图还有残余网络。之后判断图中是否存在一个负圈(spfa),如果存在则跳出,返回那个点。当前那个点不一定在负圈当中,我们开始whi原创 2017-12-10 19:00:39 · 354 阅读 · 0 评论 -
算法训练 安慰奶牛 最小生成树
问题描述Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路。道路被用来连接N个牧场,牧场被连续地编号为1到N。每一个牧场都是一个奶牛的家。FJ计划除去P条道路中尽可能多的道路,但是还要保持牧场之间 的连通性。你首先要决定那些道路是需要保留的N-1条道路。第j条双向道路连接了牧场Sj和Ej(1 j j <= N; Sj != Ej),而且走完它需要Lj的时间原创 2017-12-01 17:24:07 · 271 阅读 · 0 评论 -
51nod 1366 贫富差距
一个国家有N个公民,标记为0,1,2,...,N-1,每个公民有一个存款额。已知每个公民有一些朋友,同时国家有一条规定朋友间的存款额之差不能大于d。也就是说,a和b是朋友的话,a有x元的存款,b有y元,那么|x-y|Input多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5每组测试数据有相同的结构构成。每组数据的第一行两个整数N,d,表示人数与朋友间原创 2017-11-28 21:37:35 · 221 阅读 · 0 评论 -
POJ 2186 Popular Cows 缩点 部分点其他点都可以到达
N头牛,有向图,A->B代表着A喜欢B。 问我们最多有多少个牛,被所有牛所喜欢。这道题我们要用到缩点,先把互相喜欢的合并了,看做一个整体,之后如果某个整体只有入度,没有出度,也就代表着在这个树中,这个整体处于最低端,被其他所有整体所指,也就是所有牛都喜欢。 !只能有一个这样的整体,如果存在两个出度为0的整体,那么是无解的!#include #include原创 2017-09-30 11:10:12 · 194 阅读 · 0 评论 -
最小割问题
①求最小割边数:把第一遍dinic之后把网络中满流量(残量为0)的边的残量改为1,其余的边残量改为无穷大,不含反向边。再跑一次dinic即可得出答案②最小割边一定是满流的。③给定一个图,求有多少边增大流量可以使得从源点到汇点流量增大其实就是求最小割的割边是那些。我们先求一次网络流,之后在残余图的基础上,从源点dfs一次,记录所有原点可以到达的点。原创 2017-10-11 19:32:59 · 893 阅读 · 0 评论 -
POJ 3155 Hard Life 最大密度子图
Hard LifeTime Limit: 8000MS Memory Limit: 65536KTotal Submissions: 4345 Accepted: 1226Case Time Limit: 2000MS Special JudgeDescriptionJohn is a Ch转载 2017-10-11 19:15:52 · 226 阅读 · 0 评论 -
最大权闭合图
闭合图:我们选取一些点构成集合,记为V,且集合中的出边(即集合中的点的向外连出的弧),所指向的终点(弧头)也在V中,则我们称V为闭合图。最大权闭合图即在所有闭合图中,集合中点的权值之和最大的V,我们称V为最大权闭合图。http://www.cnblogs.com/wuyiqi/archive/2012/03/12/2391960.html构造一个源点S,汇点原创 2017-10-11 17:46:32 · 212 阅读 · 0 评论 -
POJ 1661 Help Jimmy 最短路或者dp
Help Jimmy" 是在下图所示的场景上完成的游戏。场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MA原创 2017-10-28 11:06:48 · 205 阅读 · 0 评论 -
POJ 3041 Asteroids 最小点覆盖
给一个N*N的矩阵,有些格子有障碍,要求我们消除这些障碍,问每次消除一行或一列的障碍,最少要几次。行作为X结点,列作为Y结点。如果(x,y)处有障碍,就让对应的结点连接起来。我们的任务是让所有连线都删除,也就是找最少的点让所有边都覆盖。最小点覆盖问题。最小点覆盖=最大匹配#include#include#include#define M原创 2017-10-06 14:43:16 · 230 阅读 · 0 评论 -
POJ 1486 - Sorting Slides 二分匹配 必须边
枚举每一个边,看看最大匹配数是否会减少即可#include #include using namespace std; const int maxn=26+5; struct Max_Match { int n,m; bool g[maxn][maxn]; bool vis[maxn];原创 2017-10-06 14:34:30 · 276 阅读 · 0 评论 -
POJ 3694 Network 边双联通+缩点+LCA+统计桥
先缩点,所成一棵树。树的所有线段都是一个桥。之后连接u,v。那么u,v两点一直到他们俩最近公公祖先所经过的所有的线都要删去,因为一旦u,v连接起来,这就构成一个边连通分量了。所以我们统计u,v到最近公公祖先的边数即可#include #include #include #include #include #include using name原创 2017-10-05 21:19:54 · 287 阅读 · 0 评论 -
运用map来给坐标赋值。
#include #include #include #include #include #include #include #include #include #include using namespace std;const int MAXN=400010;struct Point{ int x,y; bool frie原创 2017-10-27 21:40:56 · 686 阅读 · 0 评论 -
POJ 3687 拓扑排序
反向建图!!反向遍历!!#include#include#includeusing namespace std;int rudu[205];int mp[205][205];int vis[205];int ans[205];int n,m;int main(){ int t; int x,y,flag原创 2017-10-05 12:27:15 · 207 阅读 · 0 评论 -
Poj 3592 Instantaneous Transference
先缩点,把环都缩在一起,之后sfpa求最长路#include #include #include #include #include #define MAX 20010 using namespace std; int cases; int m,n; char src[50][50]; int tra原创 2017-10-05 11:23:48 · 207 阅读 · 0 评论 -
poj 3249 Test for Job 拓扑排序 dp
给出一张有向图,每个点有点权,现要从一条入度为0的点到一个出度为0的点,问最大点权和 dp数组,dp[i]为点i出的最大值。 我们先求出各个点的最大值。 之后比较出度等于0的点的dp,输出最大的即可。。那么,我们怎么求各个点的dp。利用拓扑排序,先让入度为0的点进入,dp等于他们的对应值。之后拓扑即可。 dp[v]=max(dp[v],dp[u]+cost[v]);原创 2017-10-05 10:56:34 · 252 阅读 · 0 评论 -
求一棵树的直径
随便从一个点出发,bfs找距离他最远的一个点。在从那个点出发,bfs找距离那个点最远的一个点。输出即可http://www.cnblogs.com/MashiroSky/p/5933122.html原创 2017-10-10 20:29:01 · 944 阅读 · 0 评论 -
POJ1470 LCA(tarjan离线求最近公共祖先)
#include #include const int N = 910; struct Edge{ int e,next; }edge[2*N]; int n,m,e_num,head[N],vis[N],cnt[N]; int x[N*N],y[N*N],f[N*N]; void AddEdge(int a,int原创 2017-10-10 20:25:16 · 281 阅读 · 0 评论 -
poj 3680 用网络流解决(K次区间覆盖问题)
#include #include #include #include #include using namespace std; #define INFINITE 1 #define MAX_NODE 1005#define MAX_EDGE_NUM 40005struct Edge{ int to; int vol; int c原创 2017-12-10 19:51:12 · 447 阅读 · 0 评论 -
算法提高 最小方差生成树
问题描述给定带权无向图,求出一颗方差最小的生成树。输入格式输入多组测试数据。第一行为N,M,依次是点数和边数。接下来M行,每行三个整数U,V,W,代表连接U,V的边,和权值W。保证图连通。n=m=0标志着测试文件的结束。输出格式对于每组数据,输出最小方差,四舍五入到0.01。输出格式按照样例。样例输入4 51 2 12 3 23原创 2017-12-02 21:20:39 · 489 阅读 · 0 评论 -
Hello 2018 B. Christmas Spruce
B. Christmas Sprucetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputConsider a rooted tree. A rooted tree ha原创 2018-01-22 11:46:56 · 231 阅读 · 0 评论 -
HDU - 5925 D - Coconuts 二维数组的离散化问题
参考:https://www.cnblogs.com/stultus/p/6393444.html他的行和列是反着的..wa了无数次...学习使用了离散化这个知识点。这道题最大的难点就是离散化之后如何计算每个区间内的小格子数量,因为常规的离散化肯定会破坏小格子的数量的,所以我们需要记录一下啊。如果对于x方向进行离散化时, 1 2 5 7位置分别存在一个坏椰子。 那么我们离散化肯定离散成了 1...原创 2018-04-30 21:43:53 · 581 阅读 · 0 评论 -
HDU - 5927 F - Auxiliary Set
Given a rooted tree with n vertices, some of the vertices are important. An auxiliary set is a set containing vertices satisfying at least one of the two conditions: ∙∙It is an important vertex ∙∙It i...原创 2018-04-30 20:36:59 · 317 阅读 · 0 评论 -
历届试题 大臣的旅费 树的直径
首先从1出发dfs,找到离1最远的点,设为x。然后再从x出发,找离x最远的点,顺便计算着路径长度。找到最远的点后,输出路径长度即可。#include<iostream>#include<cstring>#include<vector>using namespace std;struct node{ int to,cost;};vector<node&...原创 2018-03-28 22:10:07 · 337 阅读 · 0 评论 -
HDU6031 Innumerable Ancestors LCA
要求两个集合中两点最深的公共祖先。我们二分最深的深度,之后判断是否有两个集合的点在这个深度有公共祖先。对于当前深度mid,我们对于每一个a【i】,判断在mid出是否有点,有则加入set,没有不加。之后在枚举每一个b,判断b【i】在mid出的点是否在set中,如果在,说明当前b【i】与a中至少一点在mid深处有公共祖先。则返回true,再往更深的深度查询即可。#include<cstdio&g...原创 2018-04-10 20:46:24 · 272 阅读 · 0 评论 -
F.结果填空:藏宝图
个人手动找的..找对了可喜可贺,但是常规思路还是要有的。下面是别人的。一共11点,我们求出每个点之间的最短距离。之后全排列各个点的先后顺序。之后累加距离。找最小值即可/************************************************************************************* 答案:48 讲下思路,首先我是一个什么都不会的只会瞎暴力...转载 2018-03-26 20:20:16 · 299 阅读 · 0 评论 -
HDU - 6026 Deleting Edges
Little Q is crazy about graph theory, and now he creates a game about graphs and trees. There is a bi-directional graph with nn nodes, labeled from 0 to n−1n−1. Every edge has its length, which is a p...原创 2018-04-08 17:40:19 · 248 阅读 · 0 评论 -
CodeForces - 937D Sleepy Game
题目要求就是找一条从s出发,到出度为零的点,步数为奇数的路。如果找不到,那么如果有环,就输出有环,否则就lose。第一步就是dfs,遍历从s出发 ,到每个点奇数/偶数步是否可以到达,并记录路径。之后我们就是按三步走即可。#include<iostream>#include<cstdio>#include<cstdlib>#include<vector>...原创 2018-03-20 20:37:04 · 227 阅读 · 0 评论 -
Complete The Graph CodeForces - 716D 最短路+暴力 很好的一道题
ZS the Coder has drawn an undirected graph of n vertices numbered from 0 to n - 1 and m edges between them. Each edge of the graph is weighted, each weight is a positive integer.The next day, ZS the C...原创 2018-03-20 19:07:55 · 297 阅读 · 0 评论 -
POJ3613 Cow Relays 快速幂最短路!! 神题
题意:给定一个T(2 <= T <= 100)条边的无向图,求S到E恰好经过N(2 <= N <= 1000000)条边的最短路。一次floyd我们都走了一个k。我们执行n-1次即可。这里我们用快速幂进行处理。注意离散化#include <cstdio>#include <cstring>#include <map>using names...原创 2018-03-05 20:27:28 · 413 阅读 · 0 评论 -
poj3680 网络流离散化最大覆盖
他说每个点都不能被k个区间覆盖。也就是说每个点最大流量为k,所以i-1到i的流量为k,费用为0.我们在把输入数据的区间放进去,费用取负数。源点指向1,n指向汇点,流量都为k。如果有一个1-4的区间,我们选择了,之后1肯定被占用了1个流量,1一旦被占用了,代表着2,3都被占用了。#include <cstdio>#include <algorithm>#include <...原创 2018-02-14 20:04:12 · 321 阅读 · 0 评论 -
poj 3057 Evacuation 拆点+二分图匹配
由于每时刻每个门都只能有一个人通过。那么我们就把门拆成N的,分别代表N的时刻。如果某个人能在A时刻到达这个门,那么从A时刻到最后时刻的这个门都与这个人相连接。这样来进行二分匹配。之后从小到大枚举所有的门,累计到达的人数。所有人到达,即可。#include<cstdio>#include<cstring>#include<vector>#include<qu...原创 2018-02-14 17:37:27 · 258 阅读 · 0 评论 -
poj 3686 时间片的网络流
有N个订单和M个机器,给出第i个订单在第j个机器完成的时间Mij,每台机器同一时刻只能处理一个订单,机器必须完整地完成一个订单后才能接着完成下一个订单。问N个订单完成时间的平均值最少为多少。把每个工厂分成n个,每个代表某时刻,某时刻的工厂只能执行一个。这样解释就很合理了。但是费用怎么求呢。对于某个工厂,T=(z1) + (z1+z2)+ (z1+z2+z3)变形得到 T=1*z3 + 2*z2 ...原创 2018-02-12 21:51:56 · 267 阅读 · 0 评论 -
Codeforces 919D - Substring 有向图判环+dfs/dp 经典!!
D. Substringtime limit per test 3 secondsmemory limit per test 256 megabytesYou are given agraph with n nodes and m directed edges. One lowercase letter is assigned to each n原创 2018-02-04 20:29:51 · 368 阅读 · 0 评论 -
CF915D Almost Acyclic Graph
给出一个n" role="presentation" style="margin: 0px; padding: 0px; display: inline; line-height: normal; font-size: 14px; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none原创 2018-01-19 13:42:10 · 267 阅读 · 0 评论 -
POJ3321:Apple Tree DFS序+树状数组
DescriptionThere is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. Kaka likes apple very much, so he has been carefully nurturing the big apple tree.原创 2018-01-24 17:14:16 · 189 阅读 · 0 评论 -
HDU 3887 DFS序+树状数组
Problem DescriptionYou are given a tree, it’s root is p, and the node is numbered from 1 to n. Now define f(i) as the number of nodes whose number is less than i in all the succeeding nodes of nod原创 2018-01-24 16:57:22 · 323 阅读 · 0 评论 -
EOJ Monthly 2018.1 F1. 最小 OR 路径 (EASY) 新的建图方式+vis同时记录点和代价
Memory limit: 512 megabytes给定一个有 n 个点和 m 条边的无向图,其中每一条边 ei 都有一个权值记为 wi。对于给出的两个点 a 和 b,求一条a 到 b 的路径,使得路径上的边权的 OR(位或)和最小,输出这个值。(也就是说,如果将路径看做边的集合 {e1,e2,…,ek},那原创 2018-01-23 15:26:55 · 488 阅读 · 0 评论 -
POJ 2762 单向的连通图
题意是给出一些点,和他们之间的有向边,如果图中任意两点 x,y 之间满足 x 可以到达 y 或者 y 可以到达 x ,就输出“Yes”,否则输出“No”,注意,这里是 x 到达 y ,或者 y 到达 x 。注意,不是双向的,只有满足一个就可以。这种题首先想都不用想,先缩点再说,把能互相到达的看做一个整体,缩小难度。之后会形成一个新图。这是我们要用到拓扑排序(如果不看题解..原创 2017-10-03 19:42:16 · 691 阅读 · 0 评论 -
POJ 3522 - Slim Span 求一颗生成树,让最大边最小边差值最小
求一颗生成树,让最大边最小边差值最小我们利用克鲁斯卡尔的规律来思考一下。克鲁斯卡尔算法是先对边进行排序,每次都是从最小的到最大的找。我们要找差值最小的,那么枚举最小边。之后最枚举的最小边开始往后找,建立一颗生成树。比较差值,输出最小的即可。#include #include #include #include #include原创 2017-10-03 18:01:16 · 274 阅读 · 0 评论