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

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

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

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

删掉一个点之后,从$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. jar包部署在linux上后浏览器访问不到的问题

    1.首先保证程序是正常运行的 2.linux的防火墙是否关闭 3.可能是iptables里面需要设置白名单 可编辑/etc/sysconfig/iptables文件加入应用端口的白名单 修改后执行sy ...

  2. 自我介绍 & 友链

    "Never say never until the very end." --Flere825 想了想其实没什么可介绍的--毕竟我这么菜也没多少人认识我qwq还是写一点吧. 某弱 ...

  3. Qt5多线程

    方法一:重写run函数 一.线程执行过程: 1.在工程中自定义一个类mythread继承与QThread: 2.重写run函数: 3.创建线程对象: 4.写按钮槽函数: ui界面加入一个按钮 给按钮添 ...

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

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

  5. 阿里云服务器(Linux)上打开新端口

    1.配置安全组: 2.开放防火墙规则 查看想开的端口是否已开 # firewall-cmd --query-port=8888/tcp    提示no表示未开 开永久端口号 firewall-cmd ...

  6. 窗体操作:CBrush类

    CBrush画刷定义了一种位图形式的像素,利用它可对区域内部填充颜色. 该类封装了Windows的图形设备接口(GDI)刷子.通过该类构造的CBrush对象可以传递给任何一个需要画刷的CDC成员函数. ...

  7. unittest详解(四) 批量执行用例(discover)

    前面我们说了,对于不同文件用例,我们可以通过addTest()把用例加载到一个测试套件(TestSuite)来统一执行,对于少量的文件这样做没问题,但是如果有几十上百个用例文件,这样做就太浪费时间了. ...

  8. windows 简单实用Elasticsearch

    官网下载地址:https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/zip/e ...

  9. C++入门经典-例3.22-循环嵌套打印三角形

    1:代码如下: // 3.22.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...

  10. Oracle 递归查询 (start with ...connect by ...prior)

    1.connect by 是结构化查询中用到的,其基本语法是:select … from tablename start with 条件1connect by 条件2where 条件3;例:selec ...