这道题,感觉不是很难,分析清楚之后非常简单。(标签都不知道怎么加)

读完题首先想到了分割点一定是必经点的一种特殊情况,如果分割点不是必经点的话,那么它就不能把这个图分成两半(存在不经过它的边沟通两半)

然后先做比较简单的必经点。想到了割点,但是数据规模太小了,所以不用那么复杂,直接暴力枚举尝试把除起点终点之外的所有点全部删掉,判断图是否连通就可以了。

在必经点的基础上做分割点。

删掉一个点之后,从$0$号点出发标记所有能够遍历到的点,再从被删掉的那个点出发,如果碰到了之前遍历过的点就说明这个点不是分割点。

要注意一个特殊情况:如果这个节点有自环,那么这个节点就不能当做分割点。(自环的那条边为两部分的公共边)(代码里写得很丑,现在想来直接特判一下不就可以了吗)

实现不是很难,广搜和深搜都可以。

(代码里编号好像忘了排序,数据好水啊)

 //nice
/*
ID: Starry21
LANG: C++
TASK: race3
*/
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>
#include<queue>
using namespace std;
#define N 55
#define ll long long
#define INF 0x3f3f3f3f
int n;
vector<int>G[N],ans1,ans2;
int vis[N];
queue<int>Q;
int main()
{
//freopen("race3.in","r",stdin);
//freopen("race3.out","w",stdout);
while()
{
int x;
while(scanf("%d",&x)!=EOF)
{
if(x==-||x==-) break;
G[n].push_back(x);
}
if(x==-) break;
n++;
}
n--;
//printf("%d\n",n);
/*for(int i=0;i<=n;i++)
{
for(int j=0;j<G[i].size();j++)
printf("%d ",G[i][j]);
puts("");
}*/
for(int s=;s<=n-;s++)//0是起点 n是终点 枚举必经点
{
memset(vis,,sizeof(vis));
while(!Q.empty()) Q.pop();
Q.push();
vis[]=;
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
if(vis[v]) continue;
vis[v]=;//56 57行顺序 防自环
if(v==s) continue;
Q.push(v);
}
}
if(vis[n]) continue;
//vis[i]=1 是从0出发不经过s能够到达的点
ans1.push_back(s);
bool f=;
while(!Q.empty()) Q.pop();
Q.push(s);
//这里vis[s]不赋值 防自环
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
if(vis[v]==) continue;
if(v==s) continue;//vis[s]没有赋值2
if(vis[v]==)//访问到了从s也能到的点
{
f=;
break;
}
vis[v]=;
Q.push(v);
}
if(f) break;
}
if(!f) ans2.push_back(s);
}
printf("%d",ans1.size());
for(int i=;i<ans1.size();i++)
printf(" %d",ans1[i]);
puts("");
printf("%d",ans2.size());
for(int i=;i<ans2.size();i++)
printf(" %d",ans2[i]);
puts("");
}
/*
注意自环的情况
比如:
1 -2
2 1 -2
3 0 -2
3 4 -2
5 0 -2
7 6 -2
7 -2
8 -2
-2
-1
中的1号点
*/

Code

USACO4.3 Street Race【分析】的更多相关文章

  1. USACO Section 4.3 Street Race(图的连通性+枚举)

    虽说是IOI'95,但是也是挺水的..for 第一问,n最大为50,所以可以直接枚举起点和终点之外的所有点,然后dfs判断是否连通:for 第二问,易知答案一定是第一问的子集,所以从第一问中的答案中枚 ...

  2. USACO 4.3 Street Race

    Street RaceIOI'95 Figure 1 gives an example of a course for a street race. You see some points, labe ...

  3. USACO Section 4

    前言 好久没更新这个系列了,最近闲的无聊写一下.有两题搜索懒得写了. P2737 [USACO4.1]麦香牛块Beef McNuggets https://www.luogu.com.cn/probl ...

  4. golang 杂思

    正文 这里给大家总结一些 Go player 开发小技巧. 欢迎批评和交流, 望大家喜欢. 1. 配置管理 推荐一种简单粗暴的配置管理方式 [配置 映射 内部结构]. 例如有个配置文件 config. ...

  5. kafka源码分析之一server启动分析

    0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...

  6. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  7. zookeeper源码分析之二客户端启动

    ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...

  8. Linux设备管理(一)_kobject, kset,ktype分析

    Linux内核大量使用面向对象的设计思想,通过追踪源码,我们甚至可以使用面向对象语言常用的UML类图来分析Linux设备管理的"类"之间的关系.这里以4.8.5内核为例从kobje ...

  9. 【JUC】JDK1.8源码分析之AbstractQueuedSynchronizer(二)

    一.前言 在锁框架中,AbstractQueuedSynchronizer抽象类可以毫不夸张的说,占据着核心地位,它提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.所以很有必 ...

随机推荐

  1. linux 查找某文件所在路径

    find 路径 -name 文件名 例如:find / -name logo_web.png  查找/路径下logo_web.png文件路径 如果为非root账号可用 sudo find / -nam ...

  2. Spring MVC 设置UTF-8编码

    按照需求选其中之一即可吧. 修改读取参数时候的编码: 在web.xml中: 添加一个过滤器(filter),注册 org.springframework.web.filter.CharacterEnc ...

  3. 【leetcode】960. Delete Columns to Make Sorted III

    题目如下: We are given an array A of N lowercase letter strings, all of the same length. Now, we may cho ...

  4. SpringBoot项目构建、测试、热部署、配置原理、执行流程

    SpringBoot项目构建.测试.热部署.配置原理.执行流程 一.项目构建 二.测试和热部署 三.配置原理 四.执行流程

  5. 什么是BFC(块级格式上下文)?

    ㈠什么是BFC? BFC 全称为 块格式化上下文 (Block Formatting Context) . 定义:浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, ta ...

  6. D. Tokitsukaze, CSL and Stone Game ( 取石子游戏?no,更像棋盘游戏 )

    去吧,皮皮虾 题意:  有 n 堆石子,每堆有 a[ i ] 个,然后每次 操作 可以选择任意一堆 石子,取走一个. 若你取完了之后,存在两堆石子,他们的个数一样多,你就输了( 包括两堆都是0个), ...

  7. Linux扩展swap分区

    一.将sda磁盘进行分区: 先查看sda磁盘已经使用了多少主分区,如下图所示,主分区已使用3个,所以应选择扩展分区: 二.再将扩展分区进行分区: 三.分区完成后执行partprobe使系统重新识别分区 ...

  8. json转换时 java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException

    java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException 遇到这种问题是 ...

  9. 错误“Object reference not set to an instance of an object”的解决方法

    在进行unity游戏制作的C#代码编写时,会遇到“NullReferenceException: Object reference not set to an instance of an objec ...

  10. 自动化部署脚本--linux执行sh脚本

    自动化部署脚本文件目录: 运行主程序:./install.sh #!/bin/bash SCRIPTPATH=$(cd "$(dirname "$0")"; p ...