usaco2016open silver3 closing
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相关推荐
- ssh无法登录,提示Connection closing...Socket close.
一.问题无法ssh直接连接到服务器 [C:\~]$ ssh 192.168.7.77Connecting to 192.168.7.77:22... Connection established. T ...
- 一道并查集的(坑)题:关闭农场closing the farm
题目描述 in English: Farmer John and his cows are planning to leave town for a long vacation, and so FJ ...
- missing closing parenthesis at end of #pragma
环境为Tornado2.2,VxWorks5.5 编译出现警告如下: warning: missing closing parenthesis at end of #pragma warning: U ...
- 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 ...
- 异常处理——zookeeper启动成功,但是zkfcunexpected error, closing socket connection and attempting reconnectjava
Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnectja ...
- One Order CLOSING date修改后的执行原理
One Order CLOSING date change debug Created by Wang, Jerry, last modified on Mar 22, 2017 要获取更多Jerry ...
- python中with及closing
推荐使用 "with"语句 以管理文件: with open("hello.txt") as hello_file: for line in hello ...
- 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 ...
- Python with和contextlib.closing配合使用(contextlib)
简单介绍下我认识contextlib的过程吧,觉得这个内置lib还挺有意思的. 1. 之前的我,只知道with会用来关闭文件,数据库资源,这很好. 只要实现了__enter__() 和 __exit_ ...
最新文章
- Haproxy Nginx cluster构建
- Aria2:轻量命令行下载工具
- MyBatis的架构和其运行流程
- Springboot整合xxl-job实现任务自定义定时任务
- Linux下源码编译安装新版libxcb
- 如何从一个 C# 的 dump 中挖到机器相关的信息?
- 视觉SLAM笔记(41) 光流
- 罗永浩的电子烟公司融资3000万元?8月或将发布新品 定价600元左右
- 1.8带有神经网络的梯度消失
- 再见,前端!别更新了,我是学不动了
- access中本年度的四月一日_《四月一日灵异事件簿》一部打工人的励志故事,哈哈哈~(诙谐,温馨,人性,可爱,悬疑,友情,羁绊)...
- 【牛刀小试4】斐波那契数
- 正确的计算机锁屏方法快捷键,电脑锁屏快捷键?(电脑快速锁屏以及酷炫快速切换窗口的方法!)...
- 火爆!联想Z5首售15分钟全网告罄力夺京东单品榜冠军
- FBX SDK动画开发
- jQuery添加css样式/动画效果
- anaconda python降级有影响吗,更新conda会导致降级和被取代的包
- 了解海外域名市场,把域名卖到全世界!
- 三层代码讲解--第二课 DATE :2004-05-25
- Python学习中的Pond是什么