传送门 解题思路 \(bitset\)维护连通性,给每个点开个\(bitset\),第\(i\)位为\(1\)则表示与第\(i\)位联通.算答案时显然要枚举每条边,而枚举边的顺序需要贪心,一个点先到达的点一定做出的贡献最大,那么就可以先求出拓扑序,然后每个点的儿子按照拓扑序排序.之后倒序枚举每个点确定答案. 代码 #include<bits/stdc++.h> using namespace std; const int MOD=1004535809; const int N=1000005;…
题意 给你一个 \(n\) 个点 \(m\) 条边的 \(\rm DAG\) ,询问最多能够删除多少条边,使得图的连通性不变 \(n\leq 3\times 10^4\ ,m\leq 10^5\) . 分析 假设有点 \(u,v,x\) ,且有边 \(u \rightarrow v,\ u \rightarrow x,\ x \rightarrow v\),那么此时 \(u \rightarrow v\) 这条边可以被删除. 于是直接拓扑排序,利用 \(bitset\) 求出每个点可以到达的点集…
Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 348  Solved: 172[Submit][Status][Discuss] Description [故事背景]还记得去年JYY所研究的强连通分量的问题吗?去年的题目里,JYY研究了对于有向图的“加边”问题.对于图论有着强烈兴趣的JYY,今年又琢磨起了“删边”的问题.[问题描述]对于一个N个点(每个点从1到N编号),M条边的有向图,JYY发现,如果从图中删去一些边,那么原图的连通性会发生改变:…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4484 每个点上存一下它到每个点的连通性.用 bitset 的话空间就是 \( \frac{n^2}{8} \) 左右. 按拓扑序从大到小枚举每个点.对于每个点判断它的哪些出边能删.然后就不太会了. 其实它的出边也不是都是等价的.连向 “拓扑序较小的点” 的出边价值更高.因为能删边的情况是 u->x->v && u->v . 所以按指向的点拓扑序递增的顺序枚举出边,用…
4484: [Jsoi2015]最小表示 题目链接 题解: bitset的题感觉都好巧妙啊QAQ. 因为题目中给出的是一个DAG,如果\(u->v\)这条边可以删去,等价于还存在一个更长的路径可以使得\(u\)到\(v\). 这里的"更长"我们可以用拓扑序来搞,拓扑序大的相对于起点也肯定更长.那么思路就是对于每个点考虑删掉其出边,并且枚举边的时候拓扑序是从小到大的,然后来检验连通性. 但如果我们按照拓扑序来搞的话,很显然是错的.我们其实可以直接按着拓扑序反着来.这样的话后面点的连…
[LOJ 3101] [Luogu 5332] [JSOI2019]精准预测(2-SAT+拓扑排序+bitset) 题面 题面较长,略 分析 首先,发现火星人只有死和活两种状态,考虑2-SAT 建图 对于每个火星人,把它按时间和状态拆点,\((i,t,0/1)\)代表第i个火星人在t时刻,0代表活,1代表死.然后按如下方法对每个火星人连边. 1.\((i,t+1,0) → (i,t,0)\),人死了不能复活,所以一个火星人t+1时刻活着,t时刻也一定活着 2.\((i,t,1) → (i,t+1…
考虑在每个点的出边中删除哪些.如果其出边所指向的点中存在某点能到达另一点,那么显然指向被到达点的边是没有用的.于是拓扑排序逆序处理,按拓扑序枚举出边,bitset维护可达点集合即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<bitset&…
描述 一条单向的铁路线上,依次有编号为 1, 2, ..., n 的 n 个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x,则始发站.终点站之间所有级别大于等于火车站 x 的都必须停靠.(注意:起始站和终点站自然也算作事先已知需要停靠的站点)例如,下表是 5 趟车次的运行情况.其中,前 4 趟车次均满足要求,而第 5 趟车次由于停靠了 3 号火车站(2 级)却未停靠途经的 6 号火车站(亦为 2 级)而不满足要求…
题意: n*m的矩阵,每个位置都有一个植物.每个植物都有一个价值(可以为负),以及一些它可以攻击的位置.从每行的最右面开始放置僵尸,僵尸从右往左行动,当僵尸在植物攻击范围内时会立刻死亡.僵尸每到一个位置可以获得该位置植物的价值.僵尸可以无限放置,求最大的价值和. 题解: 这种模型好像叫做最大权闭合子图. 首先通过拓扑排序将成环的点(即植物互相保护无法走到的点)删掉. 之后对于剩下的点A,若w > 0,则S→A连权值为w的边. 若w < 0,则A→T连权值为-w的边. 若A保护B(即B在A攻击范…
题面: https://www.lydsy.com/JudgeOnline/problem.php?id=4562 一句话题意:给一个DAG,求有多少条不完全相同的链,使链首入度为0,链尾出度为0. 题解: 将每个入度为零的点权值为一,然后在拓扑排序的过程中将自身的权值加到出边所连的点,然后清空自身. 代码: #include<bits/stdc++.h> using namespace std; ; int vis[maxn],dp[maxn],ans,n,m,ru[maxn],cnt,he…