UESTC - 900 方老师炸弹 —— 割点
题目链接:https://vjudge.net/problem/UESTC-900
方老师炸弹
Time Limit: 4000/2000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
Submit
Status
方老师准炸毁学校,学校可以被看做是一个图包含NN个顶点和MM条边(顶点从00开始标号),方老师发明了一个方老师炸弹。
这个炸弹可以炸毁某一个节点和与这个节点相连的所有边。但是方老师现在很彷徨,他想使得使用了一个炸弹之后学校炸成更多的联通块。
方老师想知道把学校炸成尽量多块的放置点的前KK个顶点是哪些,这些点可以被把学校炸成多少个联通块?
Input
- 多组数据,
EOF
结束。 - 第11行:NN和MM和KK
- 第22到第M+1M+1行:每一行22个数UiUi和ViVi,表示UiUi到ViVi之间有一条边。
Output
KK行,每行22个数PosiPosi,CiCi,用空格隔开,表示在PosiPosi点放置炸弹可以把学校炸成CiCi块。如果对于不同的点可以把学校炸成相同多块,优先输出编号小的顶点。
每组数据后面输出一个空行
Sample input and output
Sample Input | Sample Output |
---|---|
|
|
Hint
K≤N≤10000K≤N≤10000,M≤100000
题解:
割点的裸题。
代码如下:
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- using namespace std;
- typedef long long LL;
- const int INF = 2e9;
- const LL LNF = 9e18;
- const int mod = 1e9+;
- const int maxn = +;
- int n, m, k,vis[maxn], low[maxn], dfn[maxn], stamp;
- struct node //q[i].x为删除结点i后增加的连通块
- {
- int x, id;
- bool operator<(const node &a)const{
- if(x==a.x) return id<a.id;
- return x>a.x;
- }
- }q[maxn];
- struct
- {
- int v, next;
- }edge[maxn*];
- int tot, head[maxn];
- void add(int u, int v)
- {
- edge[tot].v = v;
- edge[tot].next = head[u];
- head[u] = tot++;
- }
- void dfs(int u, int pre)
- {
- dfn[u] = low[u] = ++stamp;
- for(int i = head[u]; i!=-; i = edge[i].next)
- {
- int v = edge[i].v;
- if(v==pre) continue;
- if(!dfn[v])
- {
- dfs(v, u);
- low[u] = min(low[u], low[v]);
- if(low[v]>=dfn[u])
- q[u].x++;
- }
- else
- low[u] = min(low[u],dfn[v]);
- }
- }
- int main()
- {
- while(scanf("%d%d%d",&n,&m,&k)!=EOF)
- {
- memset(vis,, sizeof(vis));
- memset(low,, sizeof(low));
- memset(dfn,, sizeof(dfn));
- memset(head,-, sizeof(head));
- for(int i = ; i<n; i++)
- {
- q[i].x = ;
- q[i].id = i;
- }
- q[].x = ;
- tot = ;
- for(int i = ; i<m; i++)
- {
- int u, v;
- scanf("%d%d",&u,&v);
- add(u,v);
- add(v,u);
- }
- stamp = ;
- dfs(,-);
- sort(q, q+n);
- for(int i = ; i<k; i++)
- printf("%d %d\n",q[i].id, q[i].x);
- putchar('\n');
- }
- }
UESTC - 900 方老师炸弹 —— 割点的更多相关文章
- UESTC 900 方老师炸弹 --Tarjan求割点及删点后连通分量数
Tarjan算法. 1.若u为根,且度大于1,则为割点 2.若u不为根,如果low[v]>=dfn[u],则u为割点(出现重边时可能导致等号,要判重边) 3.若low[v]>dfn[u], ...
- UESTC 898 方老师和缘分 --二分图匹配+强连通分量
这题原来以为是某种匹配问题,后来好像说是强连通的问题. 做法:建图,每个方老师和它想要的缘分之间连一条有向边,然后,在给出的初始匹配中反向建边,即如果第i个方老师现在找到的是缘分u,则建边u-> ...
- UESTC 884 方老师的专题讲座 --数位DP
定义:cnt[L][K]表示长度为L,最高位为K的满足条件C的个数. 首先预处理出cnt数组,枚举当前长度最高位和小一个长度的最高位,如果相差大于2则前一个加上后一个的方法数. 然后给定n,计算[1, ...
- UESTC 885 方老师买表 --状压DP
将方格的摆放分成两种: 1.水平摆放:此时所占的两个格子都记为1. 2.竖直摆放:此时底下那个格子记为1,上面那个记为0. 这样的话,每行都会有一个状态表示. 定义:dp[i][s]表示考虑已经填到第 ...
- UESTC 883 方老师与两个串 --二分搜索+DP
CF原题 由题可知,n,m太大,无法开出dp[n][m]的数组. 观察发现s/e最大为300,也就是说,选用第一种操作的次数不会超过300. 于是定义dp[i][j],第一个串的前i个数,使用了j次第 ...
- UESTC 886 方老师金币堆 --合并石子DP
环状合并石子问题. 环状无非是第n个要和第1个相邻.可以复制该行石子到原来那行的右边即可达到目的. 定义:dp[i][j]代表从第i堆合并至第j堆所要消耗的最小体力. 转移方程:dp[i][j]=mi ...
- UESTC 899 方老师和农场 --双连通分量的构造
首先将原图中的连通分量缩点,一定可以将原图缩成一棵树的形式,然后统计这棵树的叶子节点个数,答案就是(leaf+1)/2.这里不再证明,可以画个图看一下. (简单说明一下,首先把两个最近公共祖先最远的两 ...
- UESTC 901 方老师抢银行 --Tarjan求强连通分量
思路:如果出现了一个强连通分量,那么走到这个点时一定会在强连通分量里的点全部走一遍,这样才能更大.所以我们首先用Tarjan跑一遍求出所有强连通分量,然后将强连通分量缩成点(用到栈)然后就变成了一个D ...
- UESTC 914 方老师的分身I Dijkstra
题意:求有向图的往返最短路的最长长度. 分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...
随机推荐
- 利用注解和反射,将Bean枚举字段的值填入相应的字段中,并转化为fastjson返回前台
需求:需要将枚举类型的字段例如enable(是否启用)转化为enable:1,enableName:是.这种形式返回给前台. 思路:在bean字段上加上枚举类型的注解,通过字段的值和枚举类反射获取枚举 ...
- Kalendae使用总结
2019-03-06 16:50:18 git官方教程:https://github.com/Twipped/Kalendae js.css:https://pan.baidu.com/s/1Ye-d ...
- mc
Description 小C在MC里有n个牧场,自西向东呈一字形排列(自西向东用1-n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站, 每个牧场上只能建立一个控制站,每个控 ...
- android showmessage
package com.example.yanlei.yl6; import android.annotation.TargetApi; import android.app.Activity; im ...
- Java多线程之~~~ReadWriteLock 读写分离的多线程实现
在多线程开发中,常常会出现一种情况,我们希望读写分离. 就是对于读取这个动作来说,能够同一时候有多个线程同 时去读取这个资源,可是对于写这个动作来说,仅仅能同一时候有一个线程来操作.并且同一时候,当有 ...
- 我的Android进阶之旅------>怎样解决Android 5.0中出现的警告: Service Intent must be explicit:
我的Android进阶之旅-->怎样解决Android 5.0中出现的警告: java.lang.IllegalArgumentException: Service Intent must be ...
- PHP如何学习?
PHP 的学习,可以归纳为三个类型: 语言的基础语法学习,这些是 ifelse, while, switch, class, function, trait 等: 内置函数/类学习,这 ...
- 分享ArcGIS Server 10.0修复安装心得
最近,捣腾了一阵子在xp系统上安装ArcGIS Server10.0(下方均简称server),解决了一些初学者可能面临的problem,给大家贴出来, 希望能够给初学者一些有益的帮助. 我的系统环境 ...
- Google的分布式计算模型Map Reduce map函数将输入分割成key/value对
http://www.nowamagic.net/librarys/veda/detail/1768 上一篇 大规模分布式数据处理平台Hadoop的介绍 中提到了Google的分布式计算模型Map R ...
- Ubuntu下安装libsvm
在安装LibSVM前需要先装 python 和 gnuplot linux 一般都自带了python2.7,所以python的安装不再赘述 在 ubuntu 下安装 gnuplot 不能直接 sudo ...