[Vijos1022]]Victoria的舞会2 Description Victoria是一位颇有成就的艺术家,他因油画作品<我爱北京天安门>闻名于世界.现在,他为了报答帮助他的同行们,准备开一个舞会.  Victoria准备邀请n个已经确定的人,可是问题来了:  这n个人每一个人都有一个小花名册,名册里面写着他所愿意交流的人的名字.比如说在A的人名单里写了B,那么表示A愿意与B交流:但是B的名单里不见的有A,也就是说B不见的想与A交流.但是如果A愿意与B交流,B愿意与C交流,那么A一定愿意…
import java.util.ArrayList; import java.util.List; // 模块E public class AdjMatrixGraph<E> { protected SeqList<E> vertexlist; // 顺序表存储图的顶点集合 protected int[][] adjmatrix; // 图的邻接矩阵 二维图 存储的是每个顶点的名称(A,B,C,D....) ; // private final int MAX_WEIGHT = …
这… 本来想学习一下Tarjan算法的,没想到码都码好了发现这题不是求强连通分量而是简单的连通分量…图论基础都还给老师了啊啊啊!最后深搜通通解决! v标记是否被访问过,scc标记每个的祖先(本来想写Tarjan的才弄出这么奇葩个数组名字),w用于最后的统计. program vijos_p1023; ..,..] of longint; v,w:..] of boolean; n,m,t,i,ans,top:longint; low,s,scc:..] of longint; procedure…
题目链接: http://poj.org/problem?id=2513 http://bailian.openjudge.cn/practice/2513?lang=en_US Time Limit: 5000MS Memory Limit: 128000K Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possi…
题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径上的点进行标记,于是根据题意我们可以发现,如果这个图是“caterpillar”的话,那么他所有的边要么两端都在树上最长直径上,要么就是其中一端在,于是我们可以再次dfs进行判断就可以了. #include<iostream> #include<cstdio> #include<…
//用map映射TLE,字典树就AC了#include"cstdio" #include"set" using namespace std; ; ;//26个小写英文字母 struct node{ int val;//存放字符串的hash值 node* next[N]; }; node memory[MAXN]; int ant; node* root; node* create_tree() { node* p=&memory[ant++]; ;i<…
图的连通性问题包括: 1.强连通分量. 2.最小点基和最小权点基. 3.双连通. 4.全局最小割. 5.2-SAT 一.强连通分量 强连通分量很少单独出题,一般都是把求强连通分量作为缩点工具. 有三种算法: 1.Kosaraju算法.对原图和反图分别进行一次深度优先搜索. 2.Tarjan算法.用了时间戳. 3.Garbow算法.与Tarjan算法是同一思想,但更精妙. 三种算法的模版我已经贴过了  http://www.cnblogs.com/Potato-lover/p/3956604.ht…
题目链接 传送门:https://ac.nowcoder.com/acm/contest/76/F 思路: 题目的意思就是判断图的连通性可以用可达性矩阵来求,至于图的存储可以用邻接矩阵来储存,求出来可达性矩阵后判断下 a[1] [n] 是不是为零就好了,不为零的话说明从1(自己)到 n(teacher)是连通的,为零的话就说明不是连通的 代码: #include <bits/stdc++.h> using namespace std; ; int n, m, a[MAXN][MAXN]; in…
题目大意:问一个图至少加多少边能使该图的边双连通分量成为它本身. 图的边双连通分量为极大的不存在割边的子图.图的边双连通分量之间由割边连接.求法如下: 求出图的割边 在每个边双连通分量内Dfs,标记每个节点所属于的双连通分量编号 构建一新图Tree,一个节点代表一个双连通分量.原图中遍历割边,将割边连接的两个双连通分量在Tree中的对应节点连接. Tree中算出每个节点的度数,如果一节点度数为1,则其为叶子节点.输出(叶子节点数+1/2).(连接了叶子节点,就形成了环,Tree中不连接叶子节点的…
一.问题 1.问题描述: 有n个点(1...n),输入整数对(8,9),表示8,9点之间存在相互的连接关系. 动态连通性问题--编写一段程序过滤掉所以无意义的整数对,即为在不破坏图连通性的前提下,以最简单的方式表示图的连通性.2.实现方案:设计数据结构保存已经存在的整数对,并且用他们来判断新数对是否满足新相连关系.3.实例应用:网络连接问题,电子触电设计,社交网络关系等等 二.解决 1.定义问题--设计api public class UF//(类名大写)     (构造方法) UN(int N…
Floyd 判断连通性 d[i][j]仅表示i,j之间是否联通 ;k<=n;k++) ;i<=n;i++) ;j<=n;j++) dis[i][j]=dis[i][j]||(dis[i][k]&&dis[k][j]); 有向图和无向图都适用 当然了,也可以DFS判断连通性 裸题: P2419 [USACO08JAN]牛大赛Cow Contest 题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently num…
一.无向图 欧拉回路:每个顶点度数都是偶数 欧拉路:所有点度数为偶数,或者只有2个点度数为奇数 当然判连通性 hdu 1878 欧拉回路 两种判连通的方法 dfs #include <iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; #define N 1010 int degree[N],n,m; bool visit[N]; vector&…
题目已经告诉如何判断欧拉回路了,剩下的有一点要注意,可能图本身并不连通. 所以这里用并查集来判断图的联通性. #include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <string> using namespace std; /* 并查集用来判断图的联通性,有一组样例图是不连通的... */ ; ]; struct UF{ in…
点此看题面 大致题意:有\(k\)种面具(\(k\)是一个未知数且\(k≥3\),每种面具可能有多个),已知戴第\(i\)种面具的人能看到第\(i+1\)种面具上的编号,特殊的,戴第\(k\)种面具的人能看到第\(1\)种面具上的编号,现在用\(x\)和\(y\)来表示戴着第\(x\)号的面具的人能看到第\(y\)号面具的编号,给你\(m\)组\(x\)和\(y\)(信息可能并不完整),请你求出至多和至少有多少个面具. 题解 这道题可以近似地看作一个有向图,但是有向图在这道题目中是极难操作的,因…
题意:给定一张2×n的网格图,一开始矩阵所有相邻点之间有一条边 有q个询问,每次给出两个相邻的点的坐标,将其中的边删除或者添加,问如此操作之后整张图的割边数量     n,q<=2*10^5, 图始终保证联通 思路:From https://www.cnblogs.com/rpSebastian/p/7834027.html 首先可以发现不能成为割边的边,一定被某个环所包含.因此只要维护每个环的大小即可.若某条横边在两行中均出现了两次,才有可能构成环.用set来维护所有连续的横边.再用线段树来维…
题意:一个2行C列的矩形网格图,网格上的每个点代表一个城市,相邻的城市之间有一条道路 一开始每条道路都是堵塞的,堵塞即为不可经过.经过一些操作后,可能某些道路通畅了,也可能某些道路堵塞了 多次询问,询问两个城市是否联通 C,q<=1e5 思路:From https://www.cnblogs.com/MashiroSky/p/5973686.html #include<cstdio> #include<cstring> #include<string> #incl…
割点与桥 在一个无向连通图中,若将某个点及其相连的边删除后,图就不连通了,则这样的点被称为割点. 在一个无向连通图中,若将某条边删除后,图就不连通了,则这样的边被称为割边,即桥. 在一张图中求出割点或割边前,我们还需要两个辅助值来得到答案. 时间戳(dfn) 在图的dfs过程中,每个点被第一次访问的时间排行即为时间戳. 追溯值(low) 对于每一个点,该点的追溯值为以该点为根的子树中所有能通过一条不在搜索树上的边能到达该点的点的时间戳最小值. 即对于每一个点\(x\),它的追溯值要满足三个条件:…
tarjan算法 原理: 我们考虑 DFS 搜索树与强连通分量之间的关系. 如果结点 是某个强连通分量在搜索树中遇到的第⼀个结点,那么这个强连通分量的其余结点肯定 是在搜索树中以 为根的⼦树中. 被称为这个强连通分量的根. 反证法:假设有个结点 在该强连通分量中但是不在以 为根的⼦树中,那么 到 的路径中肯 定有⼀条离开⼦树的边.但是这样的边只可能是横叉边或者反祖边,然⽽这两条边都要求指向的结点已 经被访问过了,这就和 是第⼀个访问的结点⽭盾了.得证. 思路: 在 Tarjan 算法中为每个结点…
一些概念 无向图: 连通图:在无向图中,任意两点都直接或间接连通,则称该图为连通图.(或者说:任意两点之间都存在可到达的路径) 连通分量: G的 最大连通子图 称为G的连通分量. 有向图 (ps.区别在与"强") 强连通图: 在有向图中,对于每一对顶点Vi,Vj都存在从Vi到Vj和从Vj到Vi的路径(任意两点之间都存在可到达对方的路径),则称该图为强连通图. 强连通分量: 有向图G的 最大强连通子图 称为G的强连通分量. 求强连通分量+有向图的压缩(缩点) 缩点即讲一个强连通分量中的点…
家庭关系   时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte 总提交: 38            测试通过: 9 描述 给定若干家庭成员之间的关系,判断2个人是否属于同一家庭,即2个人之间均可以通过这些关系直接或者间接联系. 输入 输入数据有多组,每组数据的第一行为一个正整数n(1<=n<=100),表示有100个关系描述,接下来有n行,每行的描述方式为: p1 p2 c 其中p1.p2和c均为一串文本,表示每个人的姓名,p1和p2为c的父…
3237: [Ahoi2013]连通图 Time Limit: 20 Sec   Memory Limit: 512 MB Submit: 106   Solved: 31 [ Submit][ Status] Description Input Output Sample Input 4 5 1 2 2 3 3 4 4 1 2 4 3 1 5 2 2 3 2 1 2 Sample Output Connected Disconnected Connected HINT N<=100000 M<…
虽说是IOI'95,但是也是挺水的..for 第一问,n最大为50,所以可以直接枚举起点和终点之外的所有点,然后dfs判断是否连通:for 第二问,易知答案一定是第一问的子集,所以从第一问中的答案中枚举,也是用dfs判断. ---------------------------------------------------------------------- #include<cstdio> #include<iostream> #include<cstring>…
参考资料:http://blog.csdn.net/lezg_bkbj/article/details/11538359 上面的资料,把强连通讲的很好很清楚,值得学习. 在一个有向图G中,若两顶点间至少存在一条路径(即a能到b,b也能到a),则称两个顶点强连通:如果该有向图G中任意两顶点都强连通,则称G为强连通图:在一个非强连通图中,若有子图是强连通图,则称该子图为强连通分量. 有向图强连通分量+链式前向星 模板如下: ; ; struct edge { int next,to; }E[MAXN…
思路: 我们可以搞一棵线段树 对于一段区间有6种情况需要讨论 左上右下.左上右上.左下右下.左下右上 这四种比较好维护 用左上右下举个例子吧 就是左儿子的左上右下&左区间到右区间下面有路&右儿子的左下右下 或者是左儿子的左上右上&左区间到右区间上面有路&右儿子的左上右下 还有两种  区间的左(右)端点上下能不能联通 需要维护 这种就是左儿子的上下连通或(左上右上&左上右下&左到右两条路都联通&右儿子的上下联通) (假设c1<c2) 最后要查的是…
DFS作为一个竞赛必学的一个知识点,怎么说我都得写一下 遍历就相当于爆搜,只不过是搜的方式比较规整罢了. 深度优先遍历:为了避免重复访问某个顶点,可以设一个标志数组vis[i],未访问时值为0,访问一次后就改为1.       代码实现: //DFS参考代码 #include <cstdio> const int maxn=1010; int a[maxn][maxn]; int vis[maxn]; int n,m; void dfs(int u){ printf("%d\n&qu…
文字描述 相关定义:假若在删去顶点v以及和v相关联的各边之后,将图的一个连通分量分割成两个或两个以上的连通分量,则称顶点v为该图的一个关节点.一个没有关节点的连通图称为重连通图. 在重连通图上,任意一对顶点之间至少存在两条路径, 则在删去某个顶点以及依附于该顶点的各边时也不破坏图的连通性.若在连通图上至少删除k个顶点才能破坏图的连通性,则称此图的连通度为k. 判断图是否是重连通的,可以先利用深度优先搜索求得图的关节点,一个没有关节点的图便是重连通的.由深度优先生成树可得出两类关节点的特性: 1…
图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 B(G).其中 T(G)是遍历图时所经过的边的集合,B(G) 是遍历图时未经过的边的集合.显然,G1(V, T) 是图 G 的极小连通子图,即子图G1 是连通图 G 的生成树. 深度优先生成森林   右边的是深度优先生成森林: 连通图的生成树不一定是唯一的,不同的遍历图的方法得到不同的生成树;从不…
图的算法 1 图的遍历图的遍历就是从图中某个顶点出发,按某种方法对图中所有顶点访问且仅访问一次.遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础. 2 深度优先遍历从图中某个顶点V 出发,访问此顶点,然后依次从V的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V有路径相通的顶点都被访问到. 若此时图中善有顶点未被访问,则另选图中一个未被访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问到为止.对于从某个顶点v出发的深度优先遍历过程其实是一个递归的遍历过程.2.…
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1231    Accepted Submission(s): 478 Problem Description Caocao was defeated by Zhuge Liang and Zhou Yu in the battle of Chibi. B…