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 |
|---|---|
8 8 4 |
2 3 |
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求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...
随机推荐
- codevs——2548 自然数积分解
2548 自然数积分解 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 把自然数N分解为若干个自然数之积,输出 ...
- 2017 [六省联考] T5 分手是祝愿
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 458 Solved: 299[Submit][Statu ...
- 笔记-迎难而上之Java基础进阶5
Lambda表达式无参数无返回值的练习 //定义一个接口 public interface Cook{ public abstract void makeFood(); } public class ...
- SpringBoot中@EnableAutoConfiguration注解用法收集
参考: http://blog.csdn.net/xiaoyu411502/article/details/52770723 https://docs.spring.io/spring-boot/do ...
- 开源BT磁力搜索引擎收集
基本是利用bt网络中p2p技术实现,开源项目上实现了dht网络的搜索.是学习dht算法的好项目. https://lanmaowz.com/open-dht-spider/ https://githu ...
- eclipse不会自动编译的问题解决
注意:非必要的时候,重新下载eclipse安装是最有效的解决方法. 以下为尝试的步骤: 1.看看project->Build Automatically有没有勾上?如果没有,勾上以后,clean ...
- WindowManager.LayoutParams 详解
WindowManager.LayoutParams 是 WindowManager 接口的嵌套类:继承于 ViewGroup.LayoutParams .它的内容十分丰富.其实WindowManag ...
- Error building Player: Win32Exception: ApplicationName='E:/adt-20140702/sdk\tools\zipalign.exe', Com
1.原因 更新sdk后报错..由于版本号不同,zipalign.exe所处路径不同 2.解决的方法 在sdk路径下搜索zipalign.exe .然后拷贝到报错内容中制定的路径即可了.
- Odoo multiprocessing
Odoo 在 非 windows 系统下, 支持 并行处理,开启 workers 配置项 即可. odoo有以下配置项 跟 并行处理有关 配置项 帮助信息 解说 limit_memor ...
- odoo 的时差 坑
很多人掉进了odoo的时间坑 odoo约定关于日期的数据,存放在数据库时,以 utc0 时区也就是不带时区 存放,应用程序读取日期展示日期时, 转换成用户的时区展示 例如,stock ...