
图论
Dilly__dally
这个作者很懒,什么都没留下…
展开
-
Amanda Lounges (二分图染色+好题)
题意:给定n个点m条边的无向图(开始每个点都是白色)下面m行给出边和边权,边权表示这条边所连接的2个点中被染成黑色的点数。0表示染,1表示其中一个点染,2表示都染。问:最少染多少个点可以满足上述的边权。若不存在输出impossible思路:首先处理所有边权为0和2的情况,这样处理后图中就只剩下边权为1的子图,任意染一个点,然后bfs一下把子图染掉即可。很多细节需要考虑,值得...原创 2018-08-29 21:03:46 · 335 阅读 · 0 评论 -
【模板】tarjan(强连通+缩点)
具体学习参考https://blog.youkuaiyun.com/qq_34374664/article/details/77488976/** Tarjan 算法* 复杂度 O(N+M)*/#include<bits/stdc++.h>using namespace std;const int MAXN = 20010;//点数const int MAXM = 50010;...原创 2018-08-29 23:56:55 · 206 阅读 · 0 评论 -
POJ1236 (强连通+tarjan+缩点)
题意:有n台电脑,现在有些电脑可以传数据到另外的电脑上,即有k条边。问题1:现在问至少需要给多少台电脑传送数据才能到达全部电脑。问题2:问至少添加多少条边才能使得往任意一台电脑传送数据便可以到达所有电脑。思路:问题1可以转化为求入度为0的缩点个数,问题2可以转换为求max(入度为0的点个数,出度为0的点个数),因为tarjan后图变成一个DAG,要将该DAG变为一个强连通,那么最少连边就考虑吧...原创 2018-08-30 10:25:09 · 234 阅读 · 0 评论 -
【模板】最短路之Dijkstra算法(堆优化)
具体学习参考https://blog.youkuaiyun.com/qq_35644234/article/details/60870719#commentBox模板题HDU2544。O(n^2)//Dijkstra 单源最短路//权值必须是非负/** 单源最短路径,Dijkstra 算法,邻接矩阵形式,复杂度为O(n^2)* 求出源 beg 到所有点的最短路径,传入图的顶点数,和邻接矩...原创 2018-09-03 00:35:13 · 1081 阅读 · 0 评论 -
POJ1062(最短路+Dijkstra+限制)
年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。如果你能够弄来他的水晶球,那么只要5000金币就行了。"探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,...原创 2018-09-03 20:33:31 · 283 阅读 · 0 评论 -
POJ 1125(最短路+Dijkstra)
题意:众所周知,证券经纪人对于市场传闻十分敏感。现在你被雇佣去开发一种在经纪人之间传播虚假信息的模式,使得你的雇主在市场中获得特殊的战略优势。为了获得最大的效果,你必须在尽可能快的时间内传播谣言。不幸的是,证券经纪人只信赖来自他们认为是“可靠来源”的消息。这意味着你必须在开始传播流言时考虑他们之间的关系。当流言开始传播时,某个经纪人需要一定的时间将其传递给他的所有同事。你的任务是编写一...原创 2018-09-04 00:13:04 · 409 阅读 · 0 评论 -
POJ 1502(最短路+Dijkstra)
题意:给定一个下三角矩阵,询问从1开始到其他点的最短路径中,最长的那个是多少思路:先Dijkstra求出最短路,再在最短路找出最长路,水题。。#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#in...原创 2018-09-04 00:40:01 · 293 阅读 · 0 评论 -
【模板】判定二分图(染色)
判定一个图是否为二分图 从其中一个定点开始,将跟它邻接的点染成与其不同的颜色,最后如果邻接的点有相同颜色,则说明不是二分图,每次用bfs遍历即可。 #include <queue> #include <cstring> #include <iostream> using namespace std; const int N = 999;...原创 2018-08-29 09:24:42 · 393 阅读 · 0 评论 -
链式前向星模板
#include <stdio.h>#include <string.h>// 最大顶点数const int V = 100000;// 最大边数const int E = 100000;// 边结构体的定义struct Edge{ int to; // 表示这条边的另外一个顶点 int next; // 指...原创 2018-08-26 23:21:03 · 169 阅读 · 0 评论 -
割点与桥模板
算法:dfn【u】为dfs遍历中u是第几个被访问到的。low【u】为该dfs u可以到达的访问时间最早的祖先的深度。首先,对图进行一次dfs遍历,可以得到每个点的dfn和low。考察所有点u和它在dfs树中的儿子节点s1,s2……sk。(1)如果对于某个si,满足low[si]>=dfn[u],那么u是一个割点;(2)如果对于某个si,满足low[si]>dfn...原创 2018-08-04 21:36:15 · 174 阅读 · 0 评论 -
无向图的连通分量(DFS方法)
#include <stdio.h>#include <stdlib.h>#include <string.h>int mp[100][100];int visit[100];void dfs(int x,int n){ int i; visit[x]=1; for(i=1;i<=n;i++) { if(...原创 2018-08-05 13:07:37 · 2214 阅读 · 0 评论 -
强连通分量(Kosaraju算法)
算法思想:在一个有向图中,我们一定可以找到这样一个合理顺序,使得我们只需要按照这个顺序进行dfs遍历,那么每一次的dfs就可以使我们得到一个scc。合理顺序参考https://www.cnblogs.com/nullzx/p/6437926.html经过简单的分析我们可以知道,那样的一个合理顺序就是scc图的拓扑顺序的逆序。所以Kosaraju算法的核心思想就是如何找到scc图的拓扑顺...原创 2018-08-05 13:30:39 · 291 阅读 · 0 评论 -
UVA 124(求所有的拓扑序+字符串按行读入)
题意:第一行给定变量,第二行给定给定约束,每个约束包含两个变量, x y表示x<y思路:DFS割边法求拓扑排序,每一次DFS完要记得还原现场。注意:此题要按行读入,学习到了用getline(cin,s)按行读入 //s为string对象 ,然后用 istringstream is(s),while(is>>ch) ……#include<bits/stdc+...原创 2018-08-06 21:45:02 · 622 阅读 · 0 评论 -
HDU 5883(欧拉路+异或)
题意:n个点 m条无向边的图,找一个欧拉通路/回路使得这个路径所有结点的异或值最大。思路:首先了解欧拉路欧拉路 。先判断是否有欧拉路径或欧拉回路(入度为奇数的点是2或0),然后画画图可以看出每个点当(度数+1)/2是奇数,则有贡献,否则贡献为0(自己异或自己等于0),最后如果奇点个数为2,还要枚举每个点去异或刚才得到的答案,找到最大值。#include<bits/stdc++...原创 2018-08-14 22:04:29 · 153 阅读 · 0 评论 -
POJ1094(拓扑排序判定有环、不能确定、能确定)
#include<stdio.h>#include<string.h>int map[27][27],indegree[27],q[27];int TopoSort(int n) //拓扑排序{ int c=0,temp[27],loc,m,flag=1,i,j; ////flag=1:有序 flag=-1:不确定 for(i=1;i<...原创 2018-08-07 22:18:26 · 152 阅读 · 0 评论 -
2018 “百度之星”程序设计大赛 - 初赛(B)1001
Problem Description 度度熊最近似乎在研究图论。给定一个有 N 个点 (vertex) 以及 M 条边 (edge) 的无向简单图 (undirected simple graph),此图中保证没有任何圈 (cycle) 存在。现在你可以对此图依序进行以下的操作:移除至多 K 条边。 在保持此图是没有圈的无向简单图的条件下,自由的添加边至此图中。 请问最后此图中度...原创 2018-08-12 22:54:42 · 222 阅读 · 0 评论 -
牛客练习赛27 水图(最短路)
题意:链接:https://www.nowcoder.com/acm/contest/188/C来源:牛客网 小w不会离散数学,所以她van的图论游戏是送分的小w有一张n个点n-1条边的无向联通图,每个点编号为1~n,每条边都有一个长度小w现在在点x上她想知道从点x出发经过每个点至少一次,最少需要走多少路思路:容易找出规律答案就是每条边的距离加起来乘以2减去最长的起点到其他点的...原创 2018-09-24 10:45:17 · 412 阅读 · 0 评论