传送门

题目大意:

n个谷仓 ,每次关闭一个谷仓,问剩下没被关闭的谷仓是

否联通。

题解:并查集+倒序处理

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #define N 3030
  5. using namespace std;
  6.  
  7. int n,m,sumedge,cnt;
  8.  
  9. int head[N],fa[N],q[N],ans[N],exit[N];
  10.  
  11. struct Edge{
  12. int x,y,nxt;
  13. Edge(int x=,int y=,int nxt=):
  14. x(x),y(y),nxt(nxt){}
  15. }edge[N<<];
  16.  
  17. void add(int x,int y){
  18. edge[++sumedge]=Edge(x,y,head[x]);
  19. head[x]=sumedge;
  20. }
  21.  
  22. int f(int x){
  23. return fa[x]==x?x:fa[x]=f(fa[x]);
  24. }
  25.  
  26. int main(){
  27. scanf("%d%d",&n,&m);
  28. for(int i=;i<=m;i++){
  29. int x,y;
  30. scanf("%d%d",&x,&y);
  31. add(x,y);add(y,x);
  32. }
  33. for(int i=;i<=n;i++)fa[i]=i;cnt=n;
  34. for(int i=;i<=n;i++)scanf("%d",&q[i]);
  35. for(int i=n;i>=;i--){
  36. int x=q[i];exit[x]=true;
  37. for(int h=head[x];h;h=edge[h].nxt){
  38. int v=edge[h].y;
  39. if(exit[v]==)continue;
  40. int fx=f(x),fy=f(v);
  41. if(fx!=fy){
  42. fa[fx]=fy;
  43. cnt--;
  44. }
  45. }
  46. if(cnt==i)ans[i]=true;
  47. }
  48. for(int i=;i<=n;i++)
  49. if(ans[i])puts("YES");
  50. else puts("NO");
  51. return ;
  52. }

并查集

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #define N 3009
  5. using namespace std;
  6.  
  7. int n,m,cnt;
  8.  
  9. int q[N],exit[N],ans[N],d[N][N];
  10.  
  11. int main(){
  12. scanf("%d%d",&n,&m);
  13. for(int i=;i<=m;i++){
  14. int x,y;
  15. scanf("%d%d",&x,&y);
  16. d[x][y]=d[y][x]=true;
  17. }
  18. for(int i=;i<=n;i++)scanf("%d",&q[i]);
  19. for(int i=n;i>=;i--){
  20. bool flag=false;
  21. int now=q[i];
  22. exit[++cnt]=now;
  23. for(int k=;k<=cnt;k++){
  24. for(int j=;j<=cnt;j++){
  25. for(int p=;p<=cnt;p++){
  26. d[exit[j]][exit[p]]=d[exit[j]][exit[p]]||(d[exit[j]][exit[k]]&&d[exit[k]][exit[p]]);
  27. }
  28. }
  29. }
  30. for(int j=;j<=cnt;j++){
  31. for(int p=j+;p<=cnt;p++){
  32. if(d[exit[j]][exit[p]]==){
  33. ans[i]=;flag=true;
  34. break;
  35. }
  36. }
  37. }
  38. if(flag==false){
  39. ans[i]=;
  40. }
  41. }
  42. for(int i=;i<=n;i++)
  43. if(ans[i])printf("YES\n");
  44. else printf("NO\n");
  45. return ;
  46. }

50暴力

洛谷 P3144 [USACO16OPEN]关闭农场Closing the Farm_Silver的更多相关文章

  1. 洛谷P3144 [USACO16OPEN]关闭农场Closing the Farm_Silver

    题目描述 Farmer John and his cows are planning to leave town for a long vacation, and so FJ wants to tem ...

  2. 洛谷P3144 [USACO16OPEN]关闭农场Closing the Farm

    农夫约翰和他的奶牛准备去旅行,所以约翰想要把他的农场临时关闭. 农场有N个牛棚(牛棚从1到N编号),有M条路连接这些牛棚(1≤N,M≤3000). 约翰打算挨个关闭牛棚,在关牛棚的时候, 他突然想起一 ...

  3. [USACO16OPEN]关闭农场Closing the Farm_Silver

    题目描述 FJ和他的奶牛们正在计划离开小镇做一次长的旅行,同时FJ想临时地关掉他的农场以节省一些金钱. 这个农场一共有被用M条双向道路连接的N个谷仓(1<=N,M<=3000).为了关闭整 ...

  4. [USACO16OPEN]关闭农场Closing the Farm(洛谷 3144)

    题目描述 Farmer John and his cows are planning to leave town for a long vacation, and so FJ wants to tem ...

  5. P3144 [USACO16OPEN]关闭农场——离线,并查集

    https://www.luogu.org/problem/P3144 每次关闭一个农场,农场之间有边相连,问每次关闭后开着的农场是否是一个连通块: 数据小,离线搞: 我们先记录删的顺序,然后倒着来, ...

  6. 一道并查集的(坑)题:关闭农场closing the farm

    题目描述 in English: Farmer John and his cows are planning to leave town for a long vacation, and so FJ ...

  7. 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm

    题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...

  8. 洛谷 P3143 [USACO16OPEN]钻石收藏家Diamond Collector 解题报告

    P3143 [USACO16OPEN]钻石收藏家Diamond Collector 题目描述 Bessie the cow, always a fan of shiny objects, has ta ...

  9. 洛谷 P3143 [USACO16OPEN]钻石收藏家Diamond Collector 题解

    P3143 [USACO16OPEN]钻石收藏家Diamond Collector 题目描述 Bessie the cow, always a fan of shiny objects, has ta ...

随机推荐

  1. MapReduce:输入是两个文件,file1代表工厂表,包含工厂名列和地址编号列;file2代表地址表,包含地址名列和地址编号列。要求从输入数据中找出工厂名和地址名的对应关系,输出"工厂名----地址名"表

    文件如下: file1: Beijing Red Star Shenzhen Thunder Guangzhou Honda Beijing Rising Guangzhou Development ...

  2. C++二阶构造函数

    转自:http://blog.51cto.com/9291927/1896411 一.构造函数的问题 构造函数存在问题: A.构造函数只提供自动初始化成员变量的机会 B.不能保证初始化逻辑一定成功,如 ...

  3. Qt开发串口

    首先,在工程文件里面, QT += serialport 在头文件里面, #include <QSerialPort> 1.配置打开串口 QSerialPort* myserial = n ...

  4. 无网络环境用pip安装python类包

    1.现在有网络的电脑安装相应的包 pip install django 2.安装完成后 打包 1)新建一个文件夹(package),用来存放包: 2)执行 pip list #查看安装的包 pip f ...

  5. jquery中ajax回调函数使用this

    今天在写ajax请求的的时候success中代码老是不能正常执行,找了半天的原因,代码如下: 1 $.ajax({type: 'GET', 2 url: url, 3 data: oData, 4 s ...

  6. Record and accumulation

    最近有同学在准备校招的问题,问我几个问题,我觉得有必要把大家的问题汇总下: 1.在设计变量的while指挥时候,可以利用弹栈的特性以及Java传值 只是传递的副本  去控制 : https://www ...

  7. TNS-12541: TNS:no listener , TNS-12542: TNS:address already in use

    查看数据库监听状态不对$ lsnrctl status LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.5.0 - Production on ...

  8. elasticsearch 拼音搜索

    现在很多公司都开始使用es来做搜索,我们公司目前也有好几个业务部门在用,我主要做商户搜索,为业务部门提供基础支持.上周把呼叫中心的搜索重新整理了下,在新增几个字段后,全量同步发现通过拼音首字母搜索无法 ...

  9. 多线程-模拟阻塞queue队列

    前阵子学习了多线程,现在进行总结一下,模拟队列. 分析问题: (1)首先需要一个容器存放元素,这里用linkedList队列. (2)每次像容器中添加或删除元素的时候需要计数,所以这里需要一个计数器, ...

  10. 红米手机.驱动.XP安装

    1.发现 官网上下载的 驱动在 XP下安装不上去... (Win7 记得 貌似 没有问题...) 1.1.网上搜到的 解决方案为:解决手机不能连电脑 XP系统无法安装MTP设备驱动的终极解决_小米No ...