题目大意:
尽可能多地去掉一个有向无环图上的边,使得图的连通性不变。

思路:
拓扑排序,然后倒序求出每个结点到出度为$0$的点的距离$d$,再倒序遍历每一个点$x$,以$d$为关键字对其出边降序排序,尝试加入每一条边,若加边之前两点已经连通,则说明这条边可以删去。可以用bitset维护图的连通性,注意原图是有向图,因此不能用并查集维护。

 #include<queue>
#include<cstdio>
#include<cctype>
#include<vector>
#include<bitset>
#include<algorithm>
#include<functional>
inline int getint() {
char ch;
while(!isdigit(ch=getchar()));
int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int V=;
std::vector<int> e[V];
inline void add_edge(const int u,const int v) {
e[u].push_back(v);
}
int n;
int in[V]={},top[V]={};
inline void Kahn() {
std::queue<int> q;
for(int i=;i<=n;i++) {
if(!in[i]) q.push(i);
}
int cnt=;
while(!q.empty()) {
int x=q.front();
q.pop();
top[x]=++cnt;
for(unsigned i=;i<e[x].size();i++) {
int &y=e[x][i];
if(!--in[y]) {
q.push(y);
}
}
}
}
struct Vertex {
int top,id;
bool operator > (const Vertex &another) const {
return top>another.top;
}
};
Vertex v[V];
int dis[V]={};
int ans=;
inline bool cmp(const int x,const int y) {
return dis[x]>dis[y];
}
inline void DP() {
for(int i=;i<n;i++) {
v[i]=(Vertex){top[i+],i+};
}
std::sort(&v[],&v[n],std::greater<Vertex>());
for(int i=;i<n;i++) {
int &x=v[i].id;
for(unsigned j=;j<e[x].size();j++) {
int &y=e[x][j];
dis[x]=std::max(dis[x],dis[y]+);
}
}
}
std::bitset<V> bit[V];
inline void cut() {
for(int i=;i<n;i++) {
int &x=v[i].id;
bit[x].set(x);
std::sort(e[x].begin(),e[x].end(),cmp);
for(unsigned j=;j<e[x].size();j++) {
int &y=e[x][j];
if(bit[x][y]) ans++;
bit[x]|=bit[y];
}
}
}
int main() {
n=getint();
for(int m=getint();m;m--) {
int u=getint(),v=getint();
add_edge(u,v);
in[v]++;
}
Kahn();
DP();
cut();
printf("%d\n",ans);
return ;
}

[JSOI2015]最小表示的更多相关文章

  1. 4484: [Jsoi2015]最小表示(拓扑序+bitset维护连通性)

    4484: [Jsoi2015]最小表示 题目链接 题解: bitset的题感觉都好巧妙啊QAQ. 因为题目中给出的是一个DAG,如果\(u->v\)这条边可以删去,等价于还存在一个更长的路径可 ...

  2. BZOJ4484: [Jsoi2015]最小表示(拓扑排序乱搞+bitset)

    Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 348  Solved: 172[Submit][Status][Discuss] Descriptio ...

  3. bzoj 4484 [Jsoi2015]最小表示——bitset

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4484 每个点上存一下它到每个点的连通性.用 bitset 的话空间就是 \( \frac{n ...

  4. [BZOJ4484][JSOI2015]最小表示[拓扑排序+bitset]

    题意 给你一个 \(n\) 个点 \(m\) 条边的 \(\rm DAG\) ,询问最多能够删除多少条边,使得图的连通性不变 \(n\leq 3\times 10^4\ ,m\leq 10^5\) . ...

  5. bzoj4484[JSOI2015]最小表示

    题意 给出一张DAG,要求删除尽量多的边使得连通性不变.(即:若删边前u到v有路径,则删边后仍有路径).点数30000,边数100000. 分析 如果从u到v有(u,v)这条边,且从u到v只有这一条路 ...

  6. BZOJ4484 JSOI2015最小表示(拓扑排序+bitset)

    考虑在每个点的出边中删除哪些.如果其出边所指向的点中存在某点能到达另一点,那么显然指向被到达点的边是没有用的.于是拓扑排序逆序处理,按拓扑序枚举出边,bitset维护可达点集合即可. #include ...

  7. BZOJ 4484: [Jsoi2015]最小表示(拓扑排序+bitset)

    传送门 解题思路 \(bitset\)维护连通性,给每个点开个\(bitset\),第\(i\)位为\(1\)则表示与第\(i\)位联通.算答案时显然要枚举每条边,而枚举边的顺序需要贪心,一个点先到达 ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. 「JSOI2015」最小表示

    「JSOI2015」最小表示 传送门 很显然的一个结论:一条边 \(u \to v\) 能够被删去,当且仅当至少存在一条其它的路径从 \(u\) 通向 \(v\) . 所以我们就建出正反两张图,对每个 ...

随机推荐

  1. nova-api源码分析(APP的创建)

    目录结构如下: 上面介绍了nova-api发布所用到的一些lib库,有了上面的基础知识,再来分析nova-api的发布流程,就比较轻松了.nova-api可以提供多种api服务:ec2, osapi_ ...

  2. poj 2438 Children's Dining

    http://poj.org/problem?id=2438 题意: 有2*N个人要坐在一张圆桌上吃饭,有的人之间存在敌对关系,安排一个座位次序,使得敌对的人不相邻. 假设每个人最多有N-1个敌人.如 ...

  3. Your Prediction Gets As Good As Your Data

    Your Prediction Gets As Good As Your Data May 5, 2015 by Kazem In the past, we have seen software en ...

  4. Android手机间无线互传功能探索及实现

    年前研究了一下Android如何实现无线互传的功能,写了个小demo,最近无事,遂整理一下,与各位共享.前期调研发现,Android想要实现无线互传有以下几种技术:1,Bluetooth通行已久,简单 ...

  5. 第11月第20天 sqlite3_open xcode mysql connector

    1. sqlite3_open 死锁 * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP frame ...

  6. 洛谷 P1603 斯诺登的密码

    我一开始还没看懂非正规数字的意义,以为那里写的单词不算,蒙了好久,而且这题非常考验仔细程度,一不小心就RE,WA. 嗯,好像讲了些废话,那我们看看思路,我的做法和前面的大佬们有些不同,因为这题只有六个 ...

  7. 对git简单的认识

    了解git工作区.暂存区.版本库: 其中,使用 git add .就是将文件添加到了暂存区:而git commit -m ‘desc’:将暂存区的文件添加到版本库: 每次更新项目的步骤: 1)每次更新 ...

  8. Dream------Hbase--0.94版本和0.98/1.X版本api变动

    Dream------Hbase--0.94版本和0.98/1.X版本api变动 网上好多说getQualifier.getValue.getRow被..Array代替了,其实并不是的. 1. Int ...

  9. 升级openssh到最新版本

    首先,下载最新版本,传到服务器:http://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/ 安装 cd /root/ mkdir ssh_upg ...

  10. 设置linux的console为串口【转】

    转自:http://blog.chinaunix.net/uid-27717694-id-4074219.html 以Grub2为例:1. 修改文件/etc/default/grub   #显示启动菜 ...