Sliver3

【题目描述】

FJ和他的奶牛们正在计划离开小镇做一次长的旅行,同时FJ想临时地关掉他的农场以节省一些金钱。

这个农场一共有被用M条双向道路连接的N个谷仓(1<=N,M<=3000)。为了关闭整个农场,FJ 计划每一次关闭掉一个谷仓。当一个谷仓被关闭了,所有的连接到这个谷仓的道路都会被关闭,而且再也不能够被使用。

FJ现在正感兴趣于知道在每一个时间(这里的“时间”指在每一次关闭谷仓之后的时间)时他的农场是否是“全连通的”——也就是说从任意的一个开着的谷仓开始,能够到达另外的一个谷仓。注意自从某一个时间之后,可能整个农场都开始不会是“全连通的”。

【输入格式】

输入的第一行是N和M。下面的M行每行都描述了一条连接两个谷仓的双向路径的两个端点(输入的点保证在1...N的范围内),最后的N行是一个1...N的排列,描述每一个谷仓被关闭的顺序。

【输出顺序】

输出一共有N行,每行可以是“YES”或者“NO”。第一行表示一开始时整个农场是否是“全连通的”,然后第i+1行表示在第i次的关闭谷仓之后整个农场是否是“全连通的”。

【样例输入】

4 3

1 2

2 3

3 4

3

4

1

2

【样例输出】

YES
NO
YES
YES

================================================================

显而易见,这道题是典型的图论题.稍稍进行转换就可以变成一个无向图的模型:m 条”双向道路”即 m 条无向边,n 个”谷仓”则是 n 个顶点.每次删除一个顶点,问整个图是否连通.而要判断图是否连通,最方便的办法就是利用高效的数据结构----并查集.但是,还有但是!题目是不断删除点,这就不好实现了.不过我们可以先把删除的点先全部读进来,然后逆向地进行操作,把不断删除点变成不断增加点即可.

#include <fstream>#include <iostream>

using namespace std;

const int SIZE = (3000 + 5);

ifstream fin("closing.in");ofstream fout("closing.out");

int N, M, vertex[SIZE], father[SIZE];bool graph[SIZE][SIZE], ans[SIZE], visited[SIZE];

int Find(int);void Union(int, int);

int main() {    fin >> N >> M;

    for(int i = 1; i != N + 1; ++i) {        father[i] = i;    }

    for(int i = 0; i != M; ++i) {        int u, v;        fin >> u >> v;        graph[u][v] = graph[v][u] = true;    }

    for(int i = N - 1; i != -1; --i) {        fin >> vertex[i];    }

    for(int i = 0; i != N; ++i) {        visited[vertex[i]] = true;        int father1, father2;

        for(int j = 1; j != N + 1; ++j) {            father1 = Find(vertex[i]);

            if(j != vertex[i] && graph[vertex[i]][j] && visited[j]) {                father2 = Find(j);                Union(father1, father2);            }        }

        ans[i] = true;

        for(int j = 1; j != N + 1 && ans[i]; ++j) {            father1 = Find(vertex[i]);            father2 = Find(j);

            if(visited[j] && father1 != father2) {                ans[i] = false;            }        }    }

    for(int i = N - 1; i != -1; --i) {        fout << (ans[i] ? "YES" : "NO") << endl;    }

    return 0;}

int Find(int root) {    return (father[root] == root ? root : father[root] = Find(father[root]));}

void Union(int f1, int f2) {    if(f1 != f2) {        father[f2] = f1;    }}

usaco2016open silver3 closing相关推荐

  1. ssh无法登录,提示Connection closing...Socket close.

    一.问题无法ssh直接连接到服务器 [C:\~]$ ssh 192.168.7.77Connecting to 192.168.7.77:22... Connection established. T ...

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

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

  3. missing closing parenthesis at end of #pragma

    环境为Tornado2.2,VxWorks5.5 编译出现警告如下: warning: missing closing parenthesis at end of #pragma warning: U ...

  4. tcp_handle_req: Made 4 read attempts but message is not complete yet - closing connection

    一.现象 测试opensips时遇到这么一个错误提示: ERROR:core:tcp_handle_req: Made 4 read attempts but message is not compl ...

  5. 异常处理——zookeeper启动成功,但是zkfcunexpected error, closing socket connection and attempting reconnectjava

    Session 0x0 for server null,  unexpected error, closing socket connection and attempting reconnectja ...

  6. One Order CLOSING date修改后的执行原理

    One Order CLOSING date change debug Created by Wang, Jerry, last modified on Mar 22, 2017 要获取更多Jerry ...

  7. python中with及closing

    推荐使用 "with"语句 以管理文件: with open("hello.txt") as hello_file:     for line in hello ...

  8. javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify

    1. 问题描述: ** BEGIN NESTED EXCEPTION ** javax.net.ssl.SSLException MESSAGE: closing inbound before rec ...

  9. Python with和contextlib.closing配合使用(contextlib)

    简单介绍下我认识contextlib的过程吧,觉得这个内置lib还挺有意思的. 1. 之前的我,只知道with会用来关闭文件,数据库资源,这很好. 只要实现了__enter__() 和 __exit_ ...

最新文章

  1. Haproxy Nginx cluster构建
  2. Aria2:轻量命令行下载工具
  3. MyBatis的架构和其运行流程
  4. Springboot整合xxl-job实现任务自定义定时任务
  5. Linux下源码编译安装新版libxcb
  6. 如何从一个 C# 的 dump 中挖到机器相关的信息?
  7. 视觉SLAM笔记(41) 光流
  8. 罗永浩的电子烟公司融资3000万元?8月或将发布新品 定价600元左右
  9. 1.8带有神经网络的梯度消失
  10. 再见,前端!别更新了,我是学不动了
  11. access中本年度的四月一日_《四月一日灵异事件簿》一部打工人的励志故事,哈哈哈~(诙谐,温馨,人性,可爱,悬疑,友情,羁绊)...
  12. 【牛刀小试4】斐波那契数
  13. 正确的计算机锁屏方法快捷键,电脑锁屏快捷键?(电脑快速锁屏以及酷炫快速切换窗口的方法!)...
  14. 火爆!联想Z5首售15分钟全网告罄力夺京东单品榜冠军
  15. FBX SDK动画开发
  16. jQuery添加css样式/动画效果
  17. anaconda python降级有影响吗,更新conda会导致降级和被取代的包
  18. 了解海外域名市场,把域名卖到全世界!
  19. 三层代码讲解--第二课 DATE :2004-05-25
  20. Python学习中的Pond是什么

热门文章

  1. Java堆转储文件的生成及工具分析
  2. 数据结构与算法邓俊辉——(一)
  3. 瑞吉外卖 —— 4、菜品分类管理
  4. 一些常用的软件项目文件夹命名
  5. SharePoint2013之双语切换
  6. python中显示功能的实现,如何用python 实现老板键功能
  7. 【数据结构】带头+双向+循环链表的 增,删,查,改 的实现
  8. 小白如何用C++制作经典网游DNF?C++实战教学!
  9. catia 创建基准平面
  10. 在日本商超销售产品如何申请日本条形码?