图
Huglight
这个作者很懒,什么都没留下…
展开
-
XDU暑训2019 Day4 最短路
题意:给n个节点m条边,给出每条边相连节点,与边的权值,求1到n的最短路Dijkstra算法:#include<cstdio>#include<cmath>#include<iostream>#include<algorithm> #include<cstring>using namespace std;int n, m,...原创 2019-07-04 13:37:00 · 133 阅读 · 0 评论 -
POJ 2135 Farm Tour 最小费用流
题意:给一个无向图,求从起点到终点,和从终点到起点走过的最短路径长度,要求两次走的路径不能重复。思路:在边上加上容量1,费用即为路径长度,在源点和起点,终点和汇点之间加上容量为2,费用为0的边,表示走了两次,之后求最小费用#include<iostream>#include<cstdio>#include<cmath>#include<cstri...原创 2019-08-05 20:26:59 · 93 阅读 · 0 评论 -
POJ 1236 Network of Schools 强连通分量
题意:给一个有向图,需要实现两个任务:A:分配给一些点电脑,使得这些点能够运输到其他所有点,求出这些点个数的最小值B:为了使分配给任意节点电脑,都能运输到其他所有点,求出需要加的最少边数思路:任务A相当于求出入度为0的点的个数,任务B则需要思考,由于连通分量中每个点必须至少有一条入边一条出边,故为了使得所有点连通起来,需要将出度为0的点连一条边到入度为0的点。而需要连的边的最小值,只需要...原创 2019-08-18 17:09:59 · 67 阅读 · 0 评论 -
Codeforces 1206D Shortest Cycle Floyd 无向图最小环
题意:给出一串序列,若序列中两个数相与不为0,则可以在两数之间连一条边,求出这些数中存在的最小环中节点的个数,不存在环输出-1思路:找无向图中最小环方法:用floyd在松弛的同时找环,保证环最小。但这样的话按照题目的数据量必定会超时,而实际上只要不为0的数小于128个,就需要floyd求解,大于128个最小环节点数就是3,至于为什么现在还没弄明白#include<bits/stdc++....原创 2019-08-19 15:27:58 · 201 阅读 · 0 评论 -
POJ 1860 Currency Exchange SPFA 正权回路
题意:给出n种货币,m个兑换点,每个兑换点给出两种货币之间的汇率及佣金,如A兑换为B可以兑换(A-佣金)*汇率的量。给出初始货币种类,以及持有货币量,求是否可以找到一种兑换方案,使得持有的初始种类货币量变多思路:以初始货币为起始点,初始货币量为初始权值,初始点到其他点的路径权值设置为最小值(0),松弛操作判断是否可以使得当前点的金额变多,若松弛过程中遇到当前点为初始点,表明找到了正权环,初始货币...原创 2019-08-23 22:06:22 · 92 阅读 · 0 评论 -
POJ 3659 Cell Phone Network 最小支配集
题意:每个牧场的电塔可以覆盖与该牧场相邻的电塔,为了让所有牛都可以打电话,求建的电塔的最小数量思路:即求一棵树的最小支配集(最少的能够覆盖所有点的点数)贪心策略:先对树做一遍dfs,之后根据dfs的逆序对节点进行标记,s[i]表示该点已被覆盖,set[i]表示该点在最小支配集里,首先对子节点判断,若未被覆盖,则判断其父节点是否在支配集里,若不在,则将其放入支配集,覆盖该点、该点父节点、父节点的...原创 2019-08-11 10:06:24 · 120 阅读 · 0 评论 -
POJ 3259 Wormholes SPFA 负权环
题意:给n个农场,给m条边,每条边指定两个农场之间行走需要的时间,再给w个虫洞,可以从虫洞穿梭到另一农场并且时间倒转k秒,求是否可以从某点出发,经过一定路径之后与以前的自己相遇思路:两农场之间行走用时即为正权,虫洞穿梭即为负权,所求即为求是否存在负权环。需要注意的是要看清题意,两农场之间道路为双向边,虫洞为单向边#include<iostream>#include<cstd...原创 2019-08-23 23:03:36 · 125 阅读 · 0 评论 -
Codeforces 1204C. Anna, Svyatoslav and Maps 最短路 Floyd
题意:给一个无权有向图,和一个行走序列,求出一个最短的序列,该序列需满足:序列为行走序列的子序列,且起点及终点与行走序列相同走该序列所经过的最短路之一为给定行走序列思路:可以看出行走序列中一个点可以省略,当且仅当其前驱和后继之间的最短路必须经过该点;若前驱和后继不经过该点,表明有不经过该点的更短的路径,故必须将其加入答案序列,否则就不是给定序列的子序列。需要注意的是若前驱和后继为同一个点...原创 2019-08-24 21:09:05 · 111 阅读 · 0 评论 -
HDU 1068 Girls and Boys 二分匹配 最大独立集
题意:给出学校中暗生情愫的男生和女生,求出一个最大的互相没有联系的学生集合思路:最大独立集=N-最大匹配。用匈牙利算法求出最大匹配,由于是无向图,求出的最大匹配要除以2匈牙利算法:从第一个人开始先对边的另一端匹配,第二个人若同样存在连有之前匹配到的人的边,则递归第一个人,让第一个人选其他人来匹配,把之前那个人让给第二个人#include<iostream>#include<...原创 2019-08-17 16:09:26 · 116 阅读 · 0 评论 -
HDU 1150 Machine Schedule 二分匹配 最小点覆盖
题意:有A、B两台机器,A有n种工作模式,B有m种工作模式,给k个产品,每个产品可以在A的工作模式x或者B的工作模式y下制作。两台机器工作时可能需要切换模式,求出需要切换的最少次数思路:可以用A、B的工作模式作为点,在之间连k条边,所求即为最小点覆盖(最少的点覆盖k条边),而最小点覆盖=最大匹配,故可以用匈牙利算法来求最大匹配即可#include<iostream>#includ...原创 2019-08-30 17:17:29 · 110 阅读 · 0 评论 -
Codeforces 1214 D. Treasure Island 网络流
题意:给一个n*m的图,’.‘表示空地,’#'表示障碍,起点为左上角,终点为右下角,只能向下或向右走,求为了使不能从起点走到终点,需要放置的最少障碍数思路:官方题解思路为用两遍dfs,若求出两次相交点数大于2,答案就是2((1,2)和(2,1)处放障碍就行)。实际上这题可以用网络流来解,除了起点和终点外,每个点拆成两个点,容量为1,表示每个点只能被访问一次(若超过1次就可以在这个点放障碍),每个...原创 2019-09-05 22:19:25 · 353 阅读 · 0 评论 -
POJ 3422 Kaka's Matrix Travels 最小费用最大流
题意:给一个n*n的矩阵,可以走k次,只能往右或往下走,每次走到一个点取走这个点的数,求取走数的和的最大值思路:要是按照我之前的思路,第一个想到的不是dfs就是dp,谁知道这种题居然可以用网络流来做,建图方式对我这个水平来说可以说是非常牛逼了。由于答案要求最大费用,故可以先把边权取负,求出最小费用,最后再取反。对于每个点拆成两个点,由DP思想,可以选择走这个点或者不走这个点,所以建两条边,一条边...原创 2019-08-05 17:58:16 · 105 阅读 · 0 评论 -
洛谷P3381 最小费用最大流
题意:最小费用最大流模版,在最大流的基础上加上费用,要求流最大的同时费用最小思路:在EK的基础上将bfs换成spfa,每次求出最短路,在求出的最短路的基础上求最大流#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<vector>...原创 2019-08-05 16:09:48 · 113 阅读 · 0 评论 -
XDU暑训2019 Day4 POJ2387
也是最短路问题,多练习一下dijkstra#include<cstdio>#include<iostream>#include<cstring>#include<cmath>using namespace std;const long long inf = 0x3f3f3f3f;int n, m, g[1005][1005], vis[...原创 2019-07-04 15:19:42 · 108 阅读 · 0 评论 -
XDU暑训2019 Day4 POJ2253 青蛙距离
题意:有两个青蛙和一堆石头,青蛙分别在石头1、2上,取青蛙路径为1到2的每条通路中最大边最小的权值,比如一条通路中最大边权值为2,另一条最大边权值为1.414,答案为1.414思路:用dijkstra算法,最短路长度变为每条通路中最大边的最小权值,边的松弛根据每条通路最大边长度来操作#include<cstdio>#include<iostream>#include...原创 2019-07-04 16:28:09 · 111 阅读 · 0 评论 -
XDU暑训2019 Day4 POJ1797 城市运输
题意:给n个城市m条边,1到n的所有路径中每条路径都有一条最小边,求这些最小边中的最大值思路:用dijkstra算法求最长路,判断条件变为是否比当前最小边要长,相当于青蛙跳那题反过来#include<cstdio>#include<iostream>#include<cstring>#include<cmath>using namespa...原创 2019-07-04 17:32:24 · 116 阅读 · 0 评论 -
XDU暑训2019 Day4 POJ3268 奶牛派对
题意:给一个带权单向图,X为派对地点,奶牛参加派对跟回家都是走最短路径,求这些奶牛的最长用时(参加用时+回家用时)思路:首先想到的是每点都以该点为源点和以X为源点做一次djkstra,结果意料之内超时。AC思路:最短路数组可以重复用,所以只需要求以X为源点的最短路和以X为终点的最短路即可,求完第一个数组后翻转邻接矩阵求第二个数组,找出两数组最大和即可#include<cstdio>...原创 2019-07-04 22:17:47 · 135 阅读 · 0 评论 -
POJ 2421 Constructing Roads 最小生成树
题意:求一个图的最小生成树的权值,其中有一些边是已经连通的思路:在没连通的边中用kruskal求出最小生成树即可#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;t...原创 2019-07-24 16:27:36 · 93 阅读 · 0 评论 -
POJ 1287 Networking 最小生成树
题意:最小生成树裸题,求图的最小生成树权值思路:kruskal#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;cons...原创 2019-07-20 09:26:54 · 110 阅读 · 0 评论 -
POJ 2031 Building a Space Station 最小生成树
题意:有n个太空舱,给出每个太空舱球心坐标与球的半径,若两太空舱相邻或重叠则表示两太空舱相接,宇航员可以从A走到B当且仅当A、B直接或间接相接或者建造一条走廊将A、B直接或间接连接在一起,求将所有太空舱连接在一起的最短走廊长度思路:若两太空舱直接相接则将其并到一个集合里,最小生成树边加一,否则将其距离作为权值放到边集里,注意给的坐标是球心坐标,故距离为两球心坐标距离减去两球半径,之后根据没连接的...原创 2019-07-20 10:37:39 · 99 阅读 · 0 评论 -
洛谷P2863 The Cow Prom 强连通分量
题意:给一个无向图n个点m条边,求图的强连通分量中size>1的分量个数思路:用tarjan求图的强连通分量,在判断是否为强连通分量时求一下分量中节点个数,大于1则答案加1tarjan:基于DFS的求图的强连通分量的算法,cnt表示已经访问到的节点个数,即当前时间,dfn[x]表示x是第几个被访问到的节点,low[x]表示从x能到达的最早被访问的节点,若low[x]==dfn[x],则表...原创 2019-08-04 12:09:48 · 177 阅读 · 0 评论 -
POJ 3352 Road Construction 边双连通分量 缩点
题意:给一个无向图,求在图中最少加多少条边使得图变为边双连通图边双连通图:若一个无向图去掉任意一条边都不会改变这个图的连通性,即不存在桥,则称该图为边双连通图思路:对每个点求一次tarjan,low值相同的点在同一个边双连通分量里,将这些点缩在一个点里,求出缩点之后图中每个点的度数,需要加的边数等于(度数为1的点的数量+1)/2#include<iostream>#includ...原创 2019-08-04 16:52:39 · 160 阅读 · 0 评论 -
POJ 2186 Popular Cows 强连通分量 缩点
题意:给一个有向图,求从所有点都能够到达的这样的点的个数思路:先用tarjan求强连通分量,之后把同一分量的点缩成一个点,求出缩点后的点的出度,若出度为0的点的个数大于1,则由DAG性质得到不存在一个点能够从所有点到达,故只需要求出出度为0的那个抽象点中所包含点的个数即可#include<iostream>#include<cstdio>#include<cm...原创 2019-08-04 17:53:57 · 121 阅读 · 0 评论 -
Codeforces 1217D. Coloring Edges 拓扑排序 有向图找环
题意:给定一个有向图,可以给边染色,若图中存在环,则环中所有边不能为同一颜色,求出为了满足条件需要对边染色的最少色数,及染色方案思路:一个有向图中的边有两种情况:大的指向小的,小的指向大的。可以发现一个环中只要对这两种情况染上不同颜色,则环中必定存在两种颜色。故只需要判断给定的图是否存在环即可,若没有环,所有节点都为同一颜色;否则染色数为2,输出上述染色方案。判定有向图是否存在环可以用拓扑排序,...原创 2019-09-06 17:30:15 · 265 阅读 · 0 评论