3355: [Usaco2004 Jan]有序奶牛

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 56  Solved: 29
[Submit][Status][Discuss]

Description

    约翰的N(1≤N≤1500)头牛排成一行挤奶时,有确定的顺序.牛被编成连续的号码1..N,他拥有L条关于奶牛顺序的信息,所有的信息都写成“A在B的前面”这样的形式,而且他知道最后一条是多余的.他觉得,有些冗余信息可以由其他信息推出,可以对这些信息进行精减.请帮助约翰删除尽可能多的冗余信息,但要保证能推出原有的顺序.可以保证的是,答案唯一,且最初的信息没有矛盾,如A在B前面,B在A前面.

Input

    第1行:两个整数N和L.
    第2到L+1行:每行两个整数X和Y(1≤X,y≤N),表示X在Y前.无重复.

Output

    第1行:整数U.
    第2到U+I行:输出精减后的信息,每行2个数字,按第1列数字排序.

Sample Input

5 6
3 5
4 2
5 2
2 1
3 1
4 1

Sample Output

4
2 1
3 5
4 2
5 2

对于边(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)相关推荐

  1. bzoj 3359: [Usaco2004 Jan]矩形(DP)

    3359: [Usaco2004 Jan]矩形 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 74  Solved: 37 [Submit][Sta ...

  2. bzoj 3361: [Usaco2004 Jan]培根距离

    3361: [Usaco2004 Jan]培根距离 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 88  Solved: 70 [Submit][S ...

  3. BZOJ 3359: [Usaco2004 Jan]矩形( dp )

    数据范围这么小..怎么乱搞都可以吧... 先排序一遍然后O(n²) dp --------------------------------------------------------------- ...

  4. bzoj 3356: [Usaco2004 Jan]禁闭围栏(扫描线+树状数组)

    3356: [Usaco2004 Jan]禁闭围栏 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 45  Solved: 26 [Submit][S ...

  5. bzoj 3360: [Usaco2004 Jan]算二十四(暴力+表达式求值)

    3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 59  Solved: 48 [Submit][S ...

  6. 164. 可达性统计【拓扑排序 / bitset】

    无环说明一定有拓扑排序. 我们得到拓扑排序,倒着推.注意压位. #include<bits/stdc++.h> #include<bitset> using namespace ...

  7. 核弹剑仙 (拓扑排序+bitset或最短路)

    题目链接:https://ac.nowcoder.com/acm/contest/6874/F 题意: 题解:参考了大佬的代码后,得出了两种做法,第一种是拓扑排序,建图时将强的点指向弱的点,同时用bi ...

  8. bzoj 3356: [Usaco2004 Jan]禁闭围栏 离散化+树状数组

    新博客链接:https://www.everlasting.wang/archives/228

  9. [BZOJ4484][JSOI2015]最小表示(拓扑排序+bitset)

    有一个结论:对于边<u,v>,若这是u到v的唯一路径,则这条边显然不可被删去,否则必然可以被删去. 因为若u到v还有其它路径,则必然是从u到某个点x再到v,由于最终答案中连通性不变,也就是 ...

最新文章

  1. android studio 2.1正式版,Android Studio 1.2 正式版发布
  2. python 网站文件下载-python从网站上下载东西
  3. 【数字信号处理】离散时间信号 ( 离散时间信号知识点 | 信号定义 | 信号分类 | 根据确定性分类 | 根据周期性分类 | 根据离散型分类 )
  4. EF映射之DataBaseFirst
  5. Java Lambda 表达式的常见应用场景
  6. 七十七、React中的propTypes,defaultProps和生命周期函数
  7. 还不会python面相对象?活该单身(面向对象基础+交互关系)
  8. 《精通ASP.NET MVC 3框架》译者序
  9. UI历练素材|成功,少不了的临摹进阶
  10. 游戏设计创造对话探秘之迭代
  11. 深入浅出Python的抽象基类
  12. java/php/net/python题库管理系统设计
  13. 代码参考--点击文本,即可复制
  14. Squoosh - 谷歌出品的免费开源图片压缩工具,图片大小减少90%!支持 API 开发调用
  15. 日常运维工作的知识体系
  16. 【20230302】【剑指1】数学(中等)
  17. c 语言编译程序的首要工作,2017年计算机基础试题选择题「附答案」
  18. 乱象?真象!——中国公有云服务市场大起底
  19. 惊魂,我的23个密码被泄露,快看看你的有没有泄露
  20. 全文检索-ElasticSearch入门

热门文章

  1. 简单python脚本实例-30个Python 小例子,帮你快速上手Python
  2. python100例详解-【学习笔记】python100例
  3. python基础30个常用代码-Python基础30道测试题(字符串相关)
  4. python编程案例教程-Python程序开发案例教程
  5. dio设置自定义post请求_Flutter中的http网络请求
  6. android休眠 wifi 断流,WiFi断流算什么!安卓8.0曝出重大bug,严重多了
  7. vue内容省略表示(超过15位显示...)
  8. 【计算机网络笔记】因特网概述
  9. android api接口封装,android-apidesigner是一个网络接口封装工具
  10. Spring Boot 推荐的基础 POM 文件