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

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

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

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

删掉一个点之后,从$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. 构建的Web应用界面还不够好看?DevExtreme v19.1全新主题来袭

    行业领先的.NET界面控件DevExpress 正式发布了v19.1版本,本文将主要介绍介绍DevExtremev19.1中的数据可视化和主题控件,其中主要包含图表注释.增强图例功能等.欢迎下载v19 ...

  2. MAC下安装Homebrew和GDB,并解决无法调试问题

    Homebrew官网 http://brew.sh/index_zh-cn.html Homebrew是神马 linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案, ...

  3. 【leetcode】1234. Replace the Substring for Balanced String

    题目如下: You are given a string containing only 4 kinds of characters 'Q', 'W', 'E' and 'R'. A string i ...

  4. linux系统装机分区

  5. C# 匿名对象 增加属性

    dynamic data = new System.Dynamic.ExpandoObject(); IDictionary<string, object> dictionary = (I ...

  6. [深度学习] pytorch学习笔记(4)(Module类、实现Flatten类、Module类作用、数据增强)

    一.继承nn.Module类并自定义层 我们要利用pytorch提供的很多便利的方法,则需要将很多自定义操作封装成nn.Module类. 首先,简单实现一个Mylinear类: from torch ...

  7. POJ3233 [C - Matrix Power Series] 矩阵乘法

    解题思路 题目里要求\(\sum_{i=1}^kA^i\),我们不妨再加上一个单位矩阵,求\(\sum_{i=0}^kA^i\).然后我们发现这个式子可以写成这样的形式:\(A(A(A...)+E)+ ...

  8. [CSP-S模拟测试]:城市游戏(图论+DP)

    题目传送门(内部题109) 输入格式 第一行,两个整数$n,m$. 接下来$m$行,每行三个整数$u,v,l$,描述了一条道路连接的两个路口的编号以及道路的长度. 输出格式 输出一行一个整数,为所求的 ...

  9. visual studio运行时库MT、MTd、MD、MDd

    在开发window程序是经常会遇到编译好好的程序拿到另一台机器上面无法运行的情况,这一般是由于另一台机器上面没有安装响应的运行时库导致的,那么这个与编译选项MT.MTd.MD.MDd有什么关系呢?这是 ...

  10. leetcode 94二叉树的中序遍历

    递归算法C++代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; ...