10.27练习题 [POI2008]Blockade

10.27练习题 [POI2008]Blockade

KONO题面哒!

问题描述
某地区有n个城镇,一些城镇之间由无向边连接。每两个城镇之间至多只有一条直接连接的道路。人们可以从任意一个城镇直接或间接到达另一个城镇。每个城镇都有一个镇长。该地区正在进行镇长互访活动,每个镇长都要拜访其他所有镇长一次。
所以,计划会安排有一共n(n-1)次访问活动。 不幸的是,一个程序员总罢工正在进行中。作为抗议行动,程序员们计划封锁一些城镇,阻止人们进入,离开或者路过那里。他们正在讨论选择哪些城镇会导致最严重的后果。
编写一个程序:计算每个城镇,如果它被封锁,有多少访问活动不会发生,输出结果。
输入格式
第一行读入n,m,分别是城镇数目和道路数目
城镇编号1~n
接下来m行每行两个数字a,b,表示a和b之间有有一条无向边。
输出格式*
输出n行,每行一个数字,为第i个城镇被锁时不能发生的访问活动的数量。

样例输入
5 5
1 2
2 3
1 3
3 4
4 5
样例输出
8
8
16
14
8
数据范围
1≤n≤100000, 1≤m≤500000



你永远也想不到忘了Tarjan算法的绝望
我果然还是太菜了



(割点:即删掉此点原连通图边不连通的点)
把整个地区看成一个联通图,那么封锁一个城镇就相当于把这个点从连通图中删掉。那么,对于被删掉的这个点有两种不同的讨论方式:
(设被删掉的点为x)

  1. x不为割点:则删掉x后原连通图依然连通,所以只有与x号点的访问无法进行。此时答案为2*(n-1)。
  2. x为割点:则删掉x后原连通图将分裂成几个小块,则这几个小块与小块外的点将无法互相访问。所以此时的答案为
    $$\sum^{k}_{i=1}{size[i]*(n-size[i])}$$
    (size[i]表示第i个连通块大小)

注意:求完 x 的子树中所有割点后,还要加上剩下来的大联通块(n?sum?1)×(sum+1)和自己 1×(n?1)次访问。
(由于题面里并没有讲到的整个图联通,所以直接Tarjan(1)就可以了)


KONO代码哒!


#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define int long long
using namespace std;
const int maxn=5000000;
struct edge {
    int to,next;
} g[2*maxn+5];
int head[maxn],cnt;
int n,m;
int dfn[maxn],low[maxn],size[maxn],Dfn=0;
int ans[maxn];
void add(int from,int to) {
    g[++cnt].next=head[from];
    g[cnt].to=to;
    head[from]=cnt;
}
void T(int x) {
    dfn[x]=low[x]=++Dfn;
    int i,j,sum=0;
    size[x]=1;
    for(i=head[x]; i; i=g[i].next) {
        int v=g[i].to;
        if(!dfn[v]) {
            T(v);
            size[x]+=size[v];
            low[x]=min(low[x],low[v]);
            if(dfn[x]<=low[v]) {
                ans[x]+=sum*size[v];
                sum+=size[v];
            }
        } else low[x]=min(low[x],dfn[v]);
    }
    ans[x]+=(n-sum-1)*sum;
    ans[x]+=(n-1);
}
main() {
    ios::sync_with_stdio(0);
    cin>>n>>m;
    int i,j;
    for(i=1; i<=m; i++) {
        int x,y;
        cin>>x>>y;
        add(x,y);
        add(y,x);
    }
    T(1);
    for(i=1; i<=n; i++) {
        printf("%lld\n",2LL*ans[i]);
    }
    return 0;
}

(代码写出来奇短……)



今日收获的尼禄!

原文地址:https://www.cnblogs.com/cooper233/p/11754212.html

时间: 2024-11-09 10:18:29

10.27练习题 [POI2008]Blockade的相关文章

10.23 linux任务计划cron10.24chkconfig工具10.25 systemd管理服务10.26 unit介绍 10.27 target介绍

- 10.23 linux任务计划cron - 10.24 chkconfig工具 - 10.25 systemd管理服务 - 10.26 unit介绍 - 10.27 target介绍 - 扩展 1. anacron http://blog.csdn.net/strikers1982/article/details/4787226  2. xinetd服(默认机器没有安装这个服务,需要yum install xinetd安装) http://blog.sina.com.cn/s/blog_46

一周随笔--15.10.27

一周新知识点记录(15.10.27) 一.不规则按钮OBShapedButton 常规按钮都是一个矩形区域,即使设置了按钮layer的cornerRadious,能响应点击事件的依旧是整个矩形区域. OBShapedButton是开源的第三方库,直接继承自UIButton,直接使用即可.它的响应区域只限定在button的图片或者背景图片区域,周围空出的区域无法响应. 二.sendActionsForControlEvents UIButton的实例方法,通过代码手动发送按钮的点击事件触发按钮的响

背水一战 Windows 10 (27) - 控件(文本类): TextBlock

原文:背水一战 Windows 10 (27) - 控件(文本类): TextBlock [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) TextBlock 示例1.TextBlock 的示例 1Controls/TextControl/TextBlockDemo1.xaml <Page x:Class="Windows10.Controls.TextControl.TextBlockDemo1" xmlns="http://

2019.10.27 头条面试准备

2019.10.27 头条面试准备 个人简历 2019.06 - 至今上海华为开发工程师 实习部门:5G开发部 项目:网站开发.运维开发.数据处理 2019.06至今华为实习 Python+Django+Javascript+Nginx+rabbitMQ+ELK 基于 Django 框架使用 Python 开发网站基础进程监控系统,实现进程异常记录.进程异常自动恢复.发送告警邮件,并且用 Web 界面进行展示和管理.整个框架由本人独立设计完成并上线,保证了部门 Web 的稳定. 使用Python

angular2 组件之间通讯-使用服务通讯模式 2016.10.27 基于正式版ng2

工作中用到ng2的组件通讯 奈何官方文档言简意赅 没说明白 自己搞明白后 整理后分享下 rxjs 不懂的看这篇文章 讲很详细 http://www.open-open.com/lib/view/open1462525661610.html 以下是服务代码 1 import { Injectable } from '@angular/core'; 2 import {Subject}from"rxjs/Subject"; 3 @Injectable() 4 export class CS

2015.10.27 2013---长春

这场做了5题 呜呜呜--- 这场老是读错题,,,还读不懂题,,, 可以滚了--- A - Hard Code 签到 B - Golden Radio Base 进制的转换---读好久读不懂题--- C wtw 写的 D 读好久读不懂题--- E F syh发现是白薯模板题-- G wtw 用哈希,线段树搞的-- 还是不懂他怎么搞的 先用的模是1e9+7,,,wa了--- 后来用了这个----998244353 就过了-- J 最开始还以为是水题----sad--- 后来看了题解做的--- htt

1957.10.27.18:00

姓名: 出生地: 排盘方式:普通方式排盘 公历:1957年10月27日18时40分 农历:丁酉年[山下火]九月初五日 寒露:1957年10月08日21时31分 元亨利贞网四柱八字在线排盘系统 立冬:1957年11月08日00时21分 http://bbs.china95.net 起运:命主于出生后6年3个月15天18小时开始起运交运:命主于公历1964年2月12日12时交运 正财  枭神  日主  正官   乾造: 丁  庚  壬  己  (戌亥空) 酉  戌  申  酉   辛正印  辛正印

Android使用ContentObserver监听数据库变化(转自:http://www.blogjava.net/zhaojianhua/archive/2011/10/27/362204.html)

android 使用contentobserver监听数据库内容变化 android 使用contentobserver监听数据库内容变化 在 android中经常会用到改变数据库内容后再去使用数据库更新的内容,很多人会重新去query一遍,但是这样的问题就是程序会特别占内存,而且有可能 会搂关cursor而导致程序内存未释放等等.其实android内部提供了一种ContentObserver的东西来监听数据库内容的变化.ContentObserver 的构造函数需要一个参数Hanlder,因为

【JS学习】慕课网2-7 练习题:制作新按钮,“新窗口打开网站” ,点击打开新窗口。

要求: 1.新窗口打开时弹出确认框,是否打开 提示: 使用 if 判断确认框是否点击了确定,如点击弹出输入对话框,否则没有任何操作. 2.通过输入对话框,确定打开的网址,默认为 http://www.imooc.com/ 3.打开的窗口要求,宽400像素,高500像素,无菜单栏.无工具栏. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title> new document </title> 5 <meta