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

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

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

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

删掉一个点之后,从$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. Spring资源

    资源 官网:http://spring.io 文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/.htt ...

  2. 洛谷-P3389-高斯消元模板

    链接: https://www.luogu.org/problem/P3389 题意: 给定一个线性方程组,对其求解 思路: 高斯消元,从第一项消到最后一项,消成一个上三角矩阵.再从最后一项依次向上回 ...

  3. 针对windows10 10.4号升级后VMware低版本不能使用的问题

    windows在10.4号下午发布的新版补丁升级,VMware老版本不能打开,之后发现好多小伙伴都在贴吧发帖子VMware不能用,提示升级,犯愁升还是不升,老版本的安装了好几个虚拟机,换成新版不知道能 ...

  4. Python 3标准库 第五章 数学运算

    第五章数学运算-----------------------上下文解释:编程时,我们一般也是先给程序定义一些前提(环境变量.描述环境变化的全局变量等),这些“前提”就是上文,然后再编写各功能模块的代码 ...

  5. vue自定义指令,自动调用下载的方法

    directives: { clickDown: { inserted (el, binding, item) { if (+binding.value.item.fromId === +item.c ...

  6. mongodb .net 版本

    1.现下载驱动  再 引用dll 2.https://www.cnblogs.com/zxtceq/p/7692200.html   mongodb  .net 版本 https://www.cnbl ...

  7. 任务Task、先后任务

    Task类似后台线程. using System; using System.Threading; using System.Threading.Tasks;//引用命名空间 namespace Co ...

  8. CF 352 D 罗宾汉发钱 模拟题+贪心

    D. Robin Hood time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  9. 理解ext文件系统

    理解ext文件系统 @(0001学习博客) 注意:本文参考骏马金龙的博客,详情请移步浏览 一.一些常见的文件系统 Linux的文件系统: ext2(无日志功能), ext3, ext4, xfs, r ...

  10. 分区间统计sql、删除重复数据

    删除重复数据 备份表 删除最早的评论