牛客练习赛56 E 小雀和他的王国
题目链接:https://ac.nowcoder.com/acm/contest/3566/E
思路:tarjan缩点,桥重建图,dfs跑树的直径。
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll; const int N = (int)2e5+,mod = (int)1e9+;
struct node{
int to,nxt;
}e[N<<];
vector<pair<int,int> > cut;
int n,m,u,v,tot,tim,top,scc_num,bridge;
int head[N],dfn[N],low[N],s[N],scc_no[N],d[N];
bool vis[N]; ll quick(ll a,ll b){
ll ans=;
a=a%mod;
while(b!=){
if(b&) ans=(ans*a)%mod;
b>>=;
a=(a*a)%mod;
}
return ans;
} inline void add(int u,int v){
e[tot].to = v; e[tot].nxt = head[u]; head[u] = tot++;
e[tot].to = u; e[tot].nxt = head[v]; head[v] = tot++;
} void tarjan(int now,int pre){
dfn[now] = low[now] = ++tim;
s[top++] = now;
int pre_cnt = ;
for(int o = head[now]; ~o; o = e[o].nxt){
int to = e[o].to;
if(to == pre && pre_cnt == ){ pre_cnt = ; continue; }
if(!dfn[to]){
tarjan(to,now);
low[now] = min(low[now],low[to]);
if(dfn[now] < low[to]) cut.push_back(make_pair(now,to));
}else low[now] = min(low[now],dfn[to]);
} if(dfn[now] == low[now]){
++scc_num;
int tmp;
do{
tmp = s[--top];
scc_no[tmp] = scc_num;
}while(now != tmp);
}
} void dfs(int now,int pre){
vis[now] = ;
d[now] = d[pre]+;
for(int o = head[now]; ~o; o = e[o].nxt){
int to = e[o].to;
if(vis[to]) continue;
dfs(to,now);
}
} void rebuild(){
for(int i = ; i <= scc_num; ++i) head[i] = -; tot = ;
bridge = cut.size();
for(int i = ; i < bridge; ++i){
// printf("%d %d\n",scc_no[cut[i].first],scc_no[cut[i].second]);
add(scc_no[cut[i].first],scc_no[cut[i].second]);
}
/*
for(int i = 1; i <= scc_num; ++i){
printf("u = %d\t",i);
for(int o = head[i]; ~o; o = e[o].nxt) printf("%d ",e[o].to);
cout << endl;
}*/
} void show_info(){
for(int i = ; i <= n; ++i){
printf("loc = %d scc_no = %d\n",i,scc_no[i]);
}
} void solve(){ for(int i = ; i <= n; ++i) head[i] = -; tot = ;
for(int i = ; i <= m; ++i){
scanf("%d%d",&u,&v);
add(u,v);
}
tarjan(,);
rebuild();
int s = ;
for(int i = ; i <= scc_num; ++i){
d[i] = -; vis[i] = ;
}
dfs(s,);
for(int i = ; i <= scc_num; ++i){
if(d[s] < d[i]) s = i;
}
for(int i = ; i <= scc_num; ++i){
d[i] = -; vis[i] = ;
}
dfs(s,);
int max_len = ;
for(int i = ; i <= scc_num; ++i) max_len = max(max_len,d[i]);
// printf("max_len = %d\n",max_len);
//printf("%lf\n",(double)(bridge-max_len)/(m+1));
printf("%lld\n",1ll*(bridge-max_len)*quick(m+,mod-)%mod);
} int main(){ scanf("%d%d",&n,&m);
solve();
//show_info(); return ;
}
牛客练习赛56 E 小雀和他的王国的更多相关文章
- 牛客练习赛56 B 小琛和他的学校
题目链接:https://ac.nowcoder.com/acm/contest/3566/B 思路:一条路可把图分为左右两部分. l_ci, l_peo, r_ci, r_peo, w 分别为左边城 ...
- 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)
牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...
- 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)
牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
- 牛客练习赛44 C 小y的质数 (数论,容斥定理)
链接:https://ac.nowcoder.com/acm/contest/634/C 来源:牛客网 题目描述 给出一个区间[L,R],求出[L,R]中孪生质数有多少对. 由于这是一个区间筛质数的模 ...
- 牛客练习赛44 B 小y的线段 (思维)
链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出n条线段,第i条线段的长度为a_ia i ,每次可以从第i条线段的j位置跳到第 ...
- 牛客练习赛44 A 小y的序列 (模拟,细节)
链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
- 牛客练习赛48 D 小w的基站网络
链接:https://ac.nowcoder.com/acm/contest/923/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 牛客练习赛40 A 小D的剧场 (思维dp)
链接:https://ac.nowcoder.com/acm/contest/369/A 题目描述 若你摘得小的星星 你将得到小的幸福 若你摘得大的星星 你将得到大的财富 若两者都能摘得 你将得到 ...
- 牛客练习赛40 C 小A与欧拉路(树的直径)
链接:https://ac.nowcoder.com/acm/contest/369/C 题目描述 小A给你了一棵树,对于这棵树上的每一条边,你都可以将它复制任意(可以为0)次(即在这条边连接的两个点 ...
随机推荐
- 实验3: DHCP 基本配置
实验3-1: DHCP 基本配置 实验目的通过本实验可以掌握:(1)DHCP 的工作原理和工作过程(2)DHCP 服务器的基本配置和调试(3)客户端配置 拓扑结构 实验步骤n 步骤1:配置路由器 ...
- jmeter处理http请求Content-Type类型和传参方式
引言 我们在做接口测试的时候经常会忽略数据类型content-type的格式,以及参数Parameters和Body Data的区别和用途. 对于初次接触接口的同学来说,自己在发送一个http请求时, ...
- qt连接mysql数据库实例
qt5.2版本已经封装进去了mysql驱动,所以省去了我们现编译的麻烦!!! #include <QCoreApplication> #include <QDebug> #in ...
- 函数调用方式--__thiscall调用方式和__cdecl,__stdcall有什么区别
函数调用方式--__thiscall调用方式和__cdecl,__stdcall有什么区别 首先,__thiscall是关于类的一种调用方式,它与其他调用方式的最大区别是: __thiscall ...
- 用python制作训练集和测试集的图片名列表文本
# -*- coding: utf-8 -*- from pathlib import Path #从pathlib中导入Path import os import fileinput import ...
- jsp作用域问题
jsp的四大作用域,还是要注意一下,刚才练习javabean输入时间,第一次有个地方写错了,之后改过来之后,刷新tomcat,但是时间一直不变,很奇怪, 最后发现<useBean>标签里面 ...
- To be contine ,NW NMM backup sqlserver failed.
Last time, we talk about separate under one cluster backup into two diffetent AG backup. Does it wor ...
- Trie(字典树)的侃侃
Trie是什么 ? 字典树 : 见名知意(在树上进行查询). 跟字典相关的必定与查询有密切的关系, 查询就需要一定的媒介作为支撑,树就为这种查询提供支撑. Trie做什么 ? 实现字符串快速检索的多叉 ...
- JumpServer部署与管理
一.JumpServer 堡垒机概述 JumpServer由Python/Django进行开发.使用GNU GPL v2.0开源协议.也是全球首款完全开源的堡垒机.同时配备了业界领先的Web Term ...
- Centos7.6安装zabbix留纪录
1)查看系统版本 [root@zabbix-s41 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@zabbix-s41 ~ ...