【C002】50229234海岛帝国:独立之战【难度C】——————————————————————————————————————————————————————————————————————————

【题目要求】

恐怖分子多年来一直如饥似渴地渴求“药师傅”帝国,但是,“里脊肉”BANNIE时刻在守护着这一方水土。从而使帝国日益强大。如今,BANNIE由于在 “牡丹3”里没有镜头,自暴自弃。于是,恐怖分子国正式向“药师傅”帝国正式开战,YSF表示战争到底,寸土不让。但由于YSF气数已尽,身体情况日益糟 糕。他派“购物券”WHT为最高指挥官。“太空站站长”LYF为第二指挥官。MZA为国防部部长,率领300万军舰(全是“演员”KLINT赞助的)勇猛 冲锋。随着时光的流逝,WHT发现敌方人数太多,于是,决定先发制人,启用核弹计划及“A N.B”战略计划来阻断敌方的运输补给线,让城市变得孤立无援。核弹也会毁灭城市和连着该城市的所有路。由于战争期间,间谍事件频发,他们拆毁炸弹。而 “药师傅”帝国的资源很无限。从而只有无限枚核弹。WHT经过百般思考,决定启用该计划,先声夺人。所以他想让核弹落在某个城市,从而使恐怖分子的城市连 不在一起。由于能力有限,而且恐怖分子已经占据了绝大部分土地,声势浩大,很难人工计算。所以YSF请你来帮帮WHT,让核弹落在哪个城市能完全让城市不 连通?

【输入要求】

* 第一行:两个数:n,m表示有n个城市,m条路
* 接下来m行:两个数:a,b,表示a到b之间有一条路连接。

【输入示例】

6 7
1 4
1 3
4 2
3 2
2 5
2 6
5 6

【输出要求】

* 可能有多个数:表示要炸毁几号城市能到达目的(如果有多个可能把每个可能都输出,用换行分隔)

【输出示例】

2

【其它要求】

n<=9,m<=36
 LJX 与 WXJ 出品

【试题分析】

这道题中牵扯到了一个关于割点的问题,割点指的是在一个无向连通图中,如果删除某个顶点后,图不再连通,我们称这样的顶点为割点,所以说我们这道题可以抽象成求割点。

那么割点如何求呢?我们很容易就能想到依次删除每个节点再进行广搜,判断是否连通。但这个算法的时间复杂度为O(N(N+M))。有没有更简单的方法呢?

答案是有的,我们在遍历的时候一定会遇到割点(废话废话废话,作者傻×),关键是如何认定一个顶点是割点。假设我们在深搜时遇到了k点,此时图被分成了两部分。一部分是被访问过的,一部分是没被访问过的。如果k是割点,那么剩下的没有被访问过的点中至少会有一个点在不经过k点的情况下,是无论如何再也回不到已访问过的点了,我们只需要找出这个点就行,对于怎么找这里就不在赘述,看下面的代码。

【代码】

#include<cstdio>
#include<iostream>
using namespace std;
int n,m,e[20][20],root;
int num[20],low[20],flag[20],index;
void dfs(int cur,int father)
{
int child=0;
index++;
num[cur]=index;
low[cur]=index;
for(int i=1;i<=n;i++)
{
if(e[cur][i]==1)
{
if(num[i]==0)
{
child++;
dfs(i,cur);
low[cur]=min(low[cur],low[i]);
if(cur!=root && low[i]>=num[cur]) flag[cur]=1;
if(cur==root && child==2) flag[cur]=1;
}
else if(i!=father) low[cur]=min(low[cur],num[i]);
}
}
return;
}
int main()
{
int x,y;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
e[i][j]=0;
}
}
for(int i=1;i<=m;i++)
{
cin>>x>>y;
e[x][y]=1;
e[y][x]=1;
}
root=1;
dfs(1,root);
for(int i=1;i<=n;i++)
{
if(flag[i]==1) cout<<i<<endl;
}
//system("pause");
return 0;
}

首师大附中互测题:50229234海岛帝国:独立之战【C002】的更多相关文章

  1. 首师大附中互测题:99999999海岛帝国后传:算法大会【D001】

    [D001]99999999海岛帝国后传:算法大会[难度:D] ———————————————————————————————————————————————————————————————————— ...

  2. 首师大附中互测题:50136142WXY的坑爹百度地图【B006】(可以喝的超大桶水)

    [B006]50136142WXY的坑爹百度地图[难度B]——————————————————————————————————————————————————————————————————————— ...

  3. 首师大附中互测题:LJX的校园:入学典礼【C003】

    [C003]LJX的校园:入学典礼[难度C]—————————————————————————————————————————————————————————————————————————————— ...

  4. 【海岛帝国系列赛】No.5 海岛帝国:独立之战

    50229234海岛帝国:独立之战 [试题描述] 恐怖分子多年来一直如饥似渴地渴求“药师傅”帝国,但是,“里脊肉”BANNIE时刻在守护着这一方水土.从而使帝国日益强大.如今,BANNIE由于在 “牡 ...

  5. 首师大附中科创教育平台 我的刷题记录 0325 50212228海岛帝国:LYF的太空运输站

    今天给大家献上“D”级题:50212228海岛帝国:LYF的太空运输站!!   试题编号:0325     50212228海岛帝国:LYF的太空运输站 难度级别:D: 运行时间限制:40ms: 运行 ...

  6. 【2018集训队互测】【XSY3372】取石子

    题目来源:2018集训队互测 Round17 T2 题意: 题解: 显然我是不可能想出来的……但是觉得这题题解太神了就来搬(chao)一下……Orzpyz! 显然不会无解…… 为了方便计算石子个数,在 ...

  7. 洛谷 P4463 - [集训队互测 2012] calc(多项式)

    题面传送门 & 加强版题面传送门 竟然能独立做出 jxd 互测的题(及其加强版),震撼震撼(((故写题解以祭之 首先由于 \(a_1,a_2,\cdots,a_n\) 互不相同,故可以考虑求出 ...

  8. 【loj2461】【2018集训队互测Day 1】完美的队列

    #2461. 「2018 集训队互测 Day 1」完美的队列 传送门: https://loj.ac/problem/2461 题解: 直接做可能一次操作加入队列同时会弹出很多数字,无法维护:一个操作 ...

  9. 【CH 弱省互测 Round #1 】OVOO(可持久化可并堆)

    Description 给定一颗 \(n\) 个点的树,带边权. 你可以选出一个包含 \(1\) 顶点的连通块,连通块的权值为连接块内这些点的边权和. 求一种选法,使得这个选法的权值是所有选法中第 \ ...

随机推荐

  1. BZOJ 4568 幸运数字

    题目传送门 4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MB Description A 国共有 n 座城市,这些城市由 n-1 ...

  2. 使用mosh取代ssh提高n2n网络连接稳定性

    上文实现了远程n2n访问树莓派,但是ssh协议在网络状况不好的时候命令会卡住.这里发现了一个mosh协议,可以增强稳定性,使用后效果明显. 背景:使用n2n之后,在比较差的网络环境下,经常会被time ...

  3. Android接入支付宝和银联

    支付宝接入参考链接:https://software.intel.com/zh-cn/node/542608 银联接入参考链接:http://blog.csdn.net/gf771115/articl ...

  4. ETL简介

    1.ETL的定义 ETL分别是“Extract”.“ Transform” .“Load”三个单词的首字母缩写也就是“抽取”.“转换”.“装载”,但我们日常往往简称其为数据抽取. ETL是BI/DW( ...

  5. 【06-23】js动画学习笔记01

    <html> <head> <style> * { margin:0; padding:0; } #div1{ width:200px; height:200px; ...

  6. 100多个基础常用JS函数和语法集合大全

    网站特效离不开脚本,javascript是最常用的脚本语言,我们归纳一下常用的基础函数和语法: 1.输出语句:document.write(""); 2.JS中的注释为//3.传统 ...

  7. PF_INET 和 AF_INET 的区别

    在写网络程序的时候,建立TCP socket: sock = socket(PF_INET, SOCK_STREAM, 0); 然后再绑定本地地址或连接远程地址时需要初始化sockaddr_in结构, ...

  8. sql中case when语句的使用-来自网摘文章

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  9. 【Alpha】Daily Scrum Meeting第五次

    一.本次Daily Scrum Meeting主要内容 每个人学习情况 任务安排 界面设计问题,怎样让界面更好看? 二.任务安排 学号尾数 昨天做的任务 今天的任务 明天的任务 612 时间轴控件优化 ...

  10. 一个asp采集程序

    <% if request.QueryString="" then url="http://www.hbcz.gov.cn:7001/XZQHQueryWAR/xx ...