BZOJ 1123 tarjan】的更多相关文章

#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int,int> #define piii pair<int, pair<int,int> > using namespace std; ; + ; const int inf = 0x3f3f3f3f; const LL I…
题目链接 题意:一张无向图,把第$i$个点关联的所有边去掉,求无向图中有多少个点对不连通. 题解: 如果割的不是割点,那么总答案是$2\times (n-1)$. 如果是割点,要分别考虑每个子树的贡献. #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; typedef long long ll; , M = 5e…
tarjan找割点..不是割点答案就是(N-1)*2, 是割点的话就在tarjan的时候顺便统计一下 ------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using namespace std;   typedef long long ll;   co…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1123 [题目大意] Byteotia城市有n个towns,m条双向roads. 每条road连接两个不同的towns, 没有重复的road. 所有towns连通.输出n个数,代表如果把第i个点去掉,将有多少对点不能互通. [题解] Tarjan算法的基础应用,如果x是y分支的割点,那么y就参与x点的答案贡献计数, 将割点为x的不同分支的size进行动态乘即可. [代码] #inclu…
[POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1540  Solved: 711[Submit][Status][Discuss] Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n<=100000 m<=500000及m条边 Output 输出n个数,代表如果把第i个点去掉…
1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1030  Solved: 440[Submit][Status][Discuss] Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n<=100000 m<=500000及m条边 Output 输出n个数,代表如果把…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 点双连通分量缩点,然后各种各样. 结果不会写了.比如新连边.记录一个点是割点缩成的点还是一块缩成的点什么的. 然后去学习了TJ.其实根本不用把缩点后的图真的建出来嘛!而且人家写得好好!唉,代码能力? #include<iostream> #include<cstdio> #include<cstring> #define ll long long using…
tarjan求割点计算答案.注意不是每一棵子树都算答案.开个变量记一下. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxv 100050 #define maxe 1000050 using namespace std; ,dfn[maxv],low[maxv],stack[maxv],top=,size[maxv],times=,,a…
Sol 就是求割点,把贡献算一下就好...直接tarjan # include <bits/stdc++.h> # define RG register # define IL inline # define Fill(a, b) memset(a, b, sizeof(a)) using namespace std; typedef long long ll; const int _(1e5 + 10); IL ll Read(){ RG ll x = 0, z = 1; RG char c…
想了半天式子...最后在邓大师的帮助下想出此题....QWQ我还是太菜了 对于一个非割点,ans+=2*(n-1); 对于一个割点,ans+= #include<cstdio> #include<iostream> #define R register int using namespace std; ,M=; inline int g() { R ret=,fix=; register :fix; +(ch^); while(isdigit(ch=getchar())); ret…
我就是想骗一骗访问量 先Tarjan搞出来所有的强连通分量 正向连边 反向连边 topsort一发  搞出来每个点可以到哪些点 和哪些点可以到这个点 对于每条边 与一下  就是答案 //By SiriusRen #include <bits/stdc++.h> using namespace std; ,M=N*N; ; int low[N],dfn[N],cnt,stk[N],vis[N],p[N],top; set<int>s; struct Edge{ bitset<N…
思路: 跟POJ有一道时限挺长的题一模一样  哦 POJ 1904 题解可以看这个(捂脸) http://blog.csdn.net/qq_31785871/article/details/52963278 //By SiriusRen #include <map> #include <string> #include <cstdio> #include <cstring> #include <iostream> using namespace…
题面 传送门 分析 由于一个点可以经过多次,显然每个环都会被走一遍. 考虑缩点,将每个强连通分量缩成一个点,点权为联通分量上的所有点之和 缩点后的图是一个有向无环图(DAG) 可拓扑排序,按照拓扑序进行DP 子状态:\(dp[i]\)表示以i结尾的路径的最大权值和 状态转移方程 \(dp[y]=max(dp[y],dp[x]+val[y]) ( (x,y) \in E)\) 最终的答案为max(dp[belong[u]]),其中u是酒吧编号,belong[u]表示酒吧所在的联通分量 代码 #in…
题意 如今,路由器和交换机构建起了互联网的骨架.处在互联网的骨干位置的核心路由器典型的要处理100Gbit/s的网络流量. 他们每天都生活在巨大的压力之下.小强建立了一个模型.这世界上有N个网络设备,他们之间有M个双向的链接.这个世界是连通的. 在一段时间里,有Q个数据包要从一个网络设备发送到另一个网络设备.一个网络设备承受的压力有多大呢?很显然,这取决于Q个数据包各自走的路径. 不过,某些数据包无论走什么路径都不可避免的要通过某些网络设备.你要计算:对每个网络设备,必须通过(包括起点.终点)他…
首先我们可以将这个图缩成DAG,那么问题中的路线就可以简化为DAG中的一条链,那么我们直接做一遍spfa就好了. 反思:开始写的bfs,结果bfs的时候没有更新最大值,而是直接赋的值,后来发现不能写bfs,因为每个点可能进队好多次,当让可以改成循环队列什么的bfs,然后我就改成了spfa,伪的spfa,就是判一下这个点是不是更优了,更优才入队. /**************************************************************     Problem:…
2013-11-16 11:39 原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1051 强连通分量,缩完点之后看出度为0的强连通分量有几个,如果只有一个则输出该强连通分量的点数,否则输出0: /************************************************************** Problem: User: BLADEVIL Language: Pascal Result: Accepted T…
Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n<=100000 m<=500000及m条边 Output 输出n个数,代表如果把第i个点去掉,将有多少对点不能互通. 题解: 一段巧妙的代码: if(low[to[v]]>=pre[u]) { answer[u]+=(ll)t*siz[to[v]]; t+=siz[to[v]]; } 考虑要实…
关于基础知识的预备桥和割点.双联通分量.强连通分量,支配树.(并不会支配树) 关于有向图的Tarjan,是在熟悉不过的了,它的主要功能就是求强联通分量,缩个点,但是要注意一下构建新图的时候有可能出现重边(即使原图没有重边),他还时常和拓扑排序放在一起.eg: #include<cstdio> #include<cstring> #include<algorithm> <<)+],*xS=xB,*xT=xB; #define gtc (xS==xT&&…
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4573  Solved: 2428 [Submit][Status][Discuss] Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎.你的任务是求出有多少头 牛被所有的牛认为是受欢迎的.…
1023: [SHOI2008]cactus仙人掌图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1141  Solved: 435[Submit][Status] Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的回路. 举例来说,上面的第一个例子是一张仙人图,而第二个不是——注意到它有三条简单回路…
一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若G'=(V',E')满足V'?V,E'是E中所有跟V'有关的边,则称G'是G的一个导出子图.若G'是G的导出子图,且G'半连通,则称G'为G的半连通子图.若G'是G所有半连通子图中包含节点数最多的,则称G'是G的最大半连通子图.给定一个有向图G,请求出G的最大半连通子图拥有的节点数K,以及不同的最大半连通子图…
Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每行一个整数,按顺序表示每个路口处的ATM机中的钱数.接下来一行包含两个整数S.P,S表示市中心的编号,也就是出发的路口.P表示酒吧数目.接下来的一行中有P个整数,表示P个有酒吧的路口的编号 Output 输出一个整数,表示Banditji从市中心开始到某个酒吧结束所能抢劫的最多的现金总数. Sample…
题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是现在有个问题:软件之间存在依赖关系,即软件i只有在安装了软件j(包括软件j的直接或间接依赖)的情况下才能正确工作(软件i依赖软件j).幸运的是,一个软件最多依赖另外一个软件.如果一个软件不能正常工作,那么它能够发挥的作用为0. 我们现在知道了软件之间的依赖关系:软件i依赖软件Di.现在请你设计出一种…
#define int long long using namespace std; signed main(){ 这个题一看就是图论题,然后我们观察他的性质,因为一个图论题如果没有什么性质,就是真·不可做...... 每个疯子只有一个出度,因此我们YY一下:{ 这是一个有向图,所以,我们可以Tarjan,然后我们把点分为强联通分量内,和强联通分量外,然后我们从强联通分量内的点开始走:{ 我们一定会走回自己,而且在这条路上不会出轨,那么这个强联通分量里,有了一个环,我们继续看这个环,他不会往外申…
我: "立个flag 14点之前调完这题" 洛谷AC时间: 2019-06-24 14:00:16 实力打脸... 网络流板子从来写不对系列 题目链接: (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=1565 (luogu) https://www.luogu.org/problemnew/show/P2805 题解: 长得就那么像个最大权闭合子图啊... \(i\)攻击\(j\)相当于如果想吃掉\(i\)必须吃掉\(j…
题面:洛谷传送门 BZOJ传送门 标签里三个算法全都是提高组的,然而..这是一道神题 我们把这道题分为两个部分解决 1.找出所有咒语机两两之间的包含关系 2.求出咒语机的最长上升序列 我们假设咒语机$a,b$满足$a\in b$ 如果这个条件不成立,说明存在一个串$S$,$a$能输出,$b$不能输出 一个咒语机能产生的字符串可能是无限长的,直接枚举字符串肯定不行 考虑转化问题 我们构造另外一个图,图中每个点是一个二元组$(x,y)$ 我们暴力枚举咒语机$a$中的一个元件$x$,$b$中的一个元件…
题目 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每行一个整数,按顺序表示每个路口处的ATM机中的钱数.接下来一行包含两个整数S.P,S表示市中心的编号,也就是出发的路口.P表示酒吧数目.接下来的一行中有P个整数,表示P个有酒吧的路口的编号 输出 输出一个整数,表示Banditji从市中心开始到某个酒吧结束所能抢劫的最多的现金总数. 样例输入 样例输出…
发现自己Tarjan的板子有错误.发现可以用Map直接删去边,Get. 听说std是双连通.LCA.并查集.离线思想.用BIT维护dfs序和并查集维护LCA的动态缩点的好题 #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <vector> #include <map> #include <set>…
http://www.lydsy.com/JudgeOnline/problem.php?id=1179 缩点建图... #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #include <queue> #include <set> #…
http://www.lydsy.com/JudgeOnline/problem.php?id=1051 这题还好-1A了..但是前提还是看了题解的 囧.....一开始认为是并查集,oh,不行,,无法维护和判断..好吧. 看了题解后发现这是如何巧妙0v0!,我们将题目抽象为图,然后找出所有的环,你想啊,,,所有的换最后都有一条路径连向某一个环-那么恭喜这个环成为所有人的喜爱--咳咳..懂了吧..判断这个最后的环用tarjan缩点后判断是否有且只有一个环没有连边出去,即出度为0,用前向星的就很好判…