bzoj 3355: [Usaco2004 Jan]有序奶牛(拓扑排序+bitset)
3355: [Usaco2004 Jan]有序奶牛
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 56 Solved: 29
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
对于边(u, v),如果删除这条边后u仍然能到达v,那么这条边就可以删掉
这题没有矛盾,也没有重边,也就是说是个有向无环图
考虑暴力添加每一条边,然后看这条边(u, v)是否已经联通
添加边的顺序是什么?按照边终点拓扑序从小到大排序,如果相同就按边起点拓扑序从大到小排序
如何判定是否已经连通?b[u][v]=1表示从v点能到达u点,每次加边暴力更新就好,复杂度O(nm)
其实这样过不去,不过可以bitset优化成O(nm/32),就可以AC了
#include<stdio.h>
#include<bitset>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> G[1505];
int in[1505], rk[1505];
bitset<1505> b[1505];
typedef struct Res
{int x, y;bool operator < (const Res &b) const{if(rk[y]<rk[b.y] || rk[y]==rk[b.y] && rk[x]>rk[b.x])return 1;return 0;}
}Road;
Road s[1000005], ans[1000005];
int cnt;
bool comp(Road a, Road b)
{if(a.x<b.x || a.x==b.x && a.y<b.y)return 1;return 0;
}
queue<int> q;
int main(void)
{int n, m, x, y, i;scanf("%d%d", &n, &m);for(i=1;i<=m;i++){scanf("%d%d", &s[i].x, &s[i].y);G[s[i].x].push_back(s[i].y);in[s[i].y]++;}for(i=1;i<=n;i++){if(in[i]==0)q.push(i);}while(q.empty()==0){x = q.front();q.pop();for(i=0;i<G[x].size();i++){y = G[x][i];in[y]--;if(in[y]==0){rk[y] = rk[x]+1;q.push(y);}}}sort(s+1, s+m+1);for(i=1;i<=n;i++)b[i][i] = 1;for(i=1;i<=m;i++){if(b[s[i].y][s[i].x]==0){b[s[i].y] |= b[s[i].x];ans[++cnt] = s[i];}}printf("%d\n", cnt);sort(ans+1, ans+cnt+1, comp);for(i=1;i<=cnt;i++)printf("%d %d\n", ans[i].x, ans[i].y);return 0;
}
bzoj 3355: [Usaco2004 Jan]有序奶牛(拓扑排序+bitset)相关推荐
- bzoj 3359: [Usaco2004 Jan]矩形(DP)
3359: [Usaco2004 Jan]矩形 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 74 Solved: 37 [Submit][Sta ...
- bzoj 3361: [Usaco2004 Jan]培根距离
3361: [Usaco2004 Jan]培根距离 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 88 Solved: 70 [Submit][S ...
- BZOJ 3359: [Usaco2004 Jan]矩形( dp )
数据范围这么小..怎么乱搞都可以吧... 先排序一遍然后O(n²) dp --------------------------------------------------------------- ...
- bzoj 3356: [Usaco2004 Jan]禁闭围栏(扫描线+树状数组)
3356: [Usaco2004 Jan]禁闭围栏 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 45 Solved: 26 [Submit][S ...
- bzoj 3360: [Usaco2004 Jan]算二十四(暴力+表达式求值)
3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 59 Solved: 48 [Submit][S ...
- 164. 可达性统计【拓扑排序 / bitset】
无环说明一定有拓扑排序. 我们得到拓扑排序,倒着推.注意压位. #include<bits/stdc++.h> #include<bitset> using namespace ...
- 核弹剑仙 (拓扑排序+bitset或最短路)
题目链接:https://ac.nowcoder.com/acm/contest/6874/F 题意: 题解:参考了大佬的代码后,得出了两种做法,第一种是拓扑排序,建图时将强的点指向弱的点,同时用bi ...
- bzoj 3356: [Usaco2004 Jan]禁闭围栏 离散化+树状数组
新博客链接:https://www.everlasting.wang/archives/228
- [BZOJ4484][JSOI2015]最小表示(拓扑排序+bitset)
有一个结论:对于边<u,v>,若这是u到v的唯一路径,则这条边显然不可被删去,否则必然可以被删去. 因为若u到v还有其它路径,则必然是从u到某个点x再到v,由于最终答案中连通性不变,也就是 ...
最新文章
- android studio 2.1正式版,Android Studio 1.2 正式版发布
- python 网站文件下载-python从网站上下载东西
- 【数字信号处理】离散时间信号 ( 离散时间信号知识点 | 信号定义 | 信号分类 | 根据确定性分类 | 根据周期性分类 | 根据离散型分类 )
- EF映射之DataBaseFirst
- Java Lambda 表达式的常见应用场景
- 七十七、React中的propTypes,defaultProps和生命周期函数
- 还不会python面相对象?活该单身(面向对象基础+交互关系)
- 《精通ASP.NET MVC 3框架》译者序
- UI历练素材|成功,少不了的临摹进阶
- 游戏设计创造对话探秘之迭代
- 深入浅出Python的抽象基类
- java/php/net/python题库管理系统设计
- 代码参考--点击文本,即可复制
- Squoosh - 谷歌出品的免费开源图片压缩工具,图片大小减少90%!支持 API 开发调用
- 日常运维工作的知识体系
- 【20230302】【剑指1】数学(中等)
- c 语言编译程序的首要工作,2017年计算机基础试题选择题「附答案」
- 乱象?真象!——中国公有云服务市场大起底
- 惊魂,我的23个密码被泄露,快看看你的有没有泄露
- 全文检索-ElasticSearch入门
热门文章
- 简单python脚本实例-30个Python 小例子,帮你快速上手Python
- python100例详解-【学习笔记】python100例
- python基础30个常用代码-Python基础30道测试题(字符串相关)
- python编程案例教程-Python程序开发案例教程
- dio设置自定义post请求_Flutter中的http网络请求
- android休眠 wifi 断流,WiFi断流算什么!安卓8.0曝出重大bug,严重多了
- vue内容省略表示(超过15位显示...)
- 【计算机网络笔记】因特网概述
- android api接口封装,android-apidesigner是一个网络接口封装工具
- Spring Boot 推荐的基础 POM 文件