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

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

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

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

删掉一个点之后,从$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. 深入理解java不可变对象(转)

    深入理解Java中的不可变对象 不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象.包装器对象等,那么到底为何Java语言要这么设计,真 ...

  2. 2017 网易游戏互娱游戏研发4.21(offer)

    网易游戏互娱(offer) 去年这个时候就参加过网易游戏的实习生招聘,到今年总共收到了4次拒信.不过这次运气好,终于get了最想要的offer.去年实习生互娱笔试挂,秋招笔试挂,今年春招互娱投了连笔试 ...

  3. Nginx解析PHP

    刚安装完PHP后,nginx是无法解析的,如果输入地址会直接下载文件,需要进行如下的设置 步骤 修改/etc/nginx/sites-available/default和cat /etc/nginx/ ...

  4. websocket练习

    html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  5. 未能从程序集“netstandard, Version=2.0.0.0......”中加载类型“...”。

      需要在机器上安装:4.7.1的framework 下载地址: https://www.microsoft.com/zh-CN/download/details.aspx?id=56116 说明:n ...

  6. List集合的三个实现类比较

    1. ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 2. Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 3. LinkedList 底层数据结构是链 ...

  7. sqli-libs(3)

    今天我们来讲解 sqli-libs(3) 有括号的单引号报错  首先我们来查看加入'看报错了 在加‘’ 没报错 证明 存在注入 然后我们看加入’的报错回显的是什么 和我们的sqli-libs(1)的报 ...

  8. webdriver驱动火狐浏览器报错:Unable to find a matching set of capabilities

    raise exception_class(message, screen, stacktrace)selenium.common.exceptions.SessionNotCreatedExcept ...

  9. cgo

    package main import ( "unsafe" "fmt") /*#cgo CFLAGS: -I./#cgo LDFLAGS: -L./#incl ...

  10. 套接字选项 之 SO_REUSEADDR && SO_REUSEPORT

    说明 本文下面内容基本上是截取自stackoverflow,针对这两个选项,在另外一篇文章中做了总结,请移步<Linux TCP套接字选项 之 SO_REUSEADDR && S ...