Gym 100712H
https://vjudge.net/problem/195715/origin
先缩点,再建立新图,然后跑两遍dfs求树上最长路

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<set>
#include<map>
#include<stack>
#include<cstring>
#define inf 2147483647
#define ls rt<<1
#define rs rt<<1|1
#define lson ls,nl,mid,l,r
#define rson rs,mid+1,nr,l,r
#define N 200010
#define For(i,a,b) for(int i=a;i<=b;i++)
#define p(a) putchar(a)
#define g() getchar() using namespace std; int T;
int n,m,x,y,cnt,col,now,S,Max;
int dfn[N],low[N],c[N],ans;
bool vis[N];
struct node{
int n;
node *next;
}*e[N];
stack<int>s;
struct edge{
int x;int y;
}a[N];
void in(int &x){
int y=;
char c=g();x=;
while(c<''||c>''){
if(c=='-')y=-;
c=g();
}
while(c<=''&&c>=''){
x=(x<<)+(x<<)+c-'';c=g();
}
x*=y;
}
void o(int x){
if(x<){
p('-');
x=-x;
}
if(x>)o(x/);
p(x%+'');
} void push(int x,int y){
node *p;
p=new node();
p->n=y;
if(e[x]==)
e[x]=p;
else{
p->next=e[x]->next;
e[x]->next=p;
}
} void tarjan(int x,int fa){
dfn[x]=low[x]=++cnt;
vis[x]=;
s.push(x);
for(node *i=e[x];i;i=i->next){
if(!dfn[i->n]){
tarjan(i->n,x);
low[x]=min(low[x],low[i->n]);
}
else
if(vis[i->n]&&i->n!=fa)
low[x]=min(low[x],dfn[i->n]);
}
if(low[x]==dfn[x]){
col++;
do{
ans++;
now=s.top();
c[now]=col;
s.pop();
vis[now]=0;
}while(x!=now);
}
} void dfs(int x,int fa,int deep){
if(Max<deep){
Max=deep;
S=x;
}
for(node *i=e[x];i;i=i->next)
if(i->n!=fa)
dfs(i->n,x,deep+);
} void clear(){
memset(vis,,sizeof(vis));
memset(dfn,,sizeof(dfn));
memset(c,,sizeof(c));
memset(low,,sizeof(low));
memset(e,,sizeof(e));
Max=;
col=;
cnt=;
} int main(){
in(T);
while(T--){
clear();
in(n);in(m);
For(i,,m){
in(x);in(y);
a[i].x=x;
a[i].y=y;
push(x,y);
push(y,x);
}
tarjan(,);
memset(e,,sizeof(e));
For(i,,m)
if(c[a[i].x]!=c[a[i].y]){
push(c[a[i].x],c[a[i].y]);
push(c[a[i].y],c[a[i].x]);
}
dfs(,,);
Max=;
dfs(S,S,);
o(col-Max-);p('\n');
}
return ;
}

最新文章

  1. 【数据结构初学】(java实现篇)——队列(转)
  2. sprint3冲刺第一天
  3. WebLogic 的一些基本概念
  4. mysq 安装时候进行生成数据库系统时候执行语句 ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql 时候报错
  5. Android 4.4 新特性分析-15项大改进!
  6. hadoop vs spark
  7. Android Design Support Library: 学习CoordinatorLayout
  8. Spark中的键值对操作
  9. 深入理解Spring中bean的生命周期
  10. JAVA代码实现嵌套层级列表,POI导出嵌套层级列表
  11. Apache shiro集群实现 (六)分布式集群系统下的高可用session解决方案---Session共享
  12. python学习相关知识点
  13. MyEclipse最新版-版本更新说明及下载 - MyEclipse官方中文网
  14. vue打包后404,webpack配置问题
  15. zabbix 3.2.6+centos 7 +nginx 1.12+ mysql 5.6+ Grafana +php 5.6
  16. Java获取登录用户IP地址
  17. xtu 1242 Yada Number 容斥原理
  18. [DP题]吃糖果
  19. Jenkins+.Net Core+Git集成发布 - SkyMallCore快速开发平台
  20. Java - 使可访问性最小化

热门文章

  1. MySQL基础知识 数据库 数据表
  2. Go语言简介以及安装
  3. day16 python-04 字典
  4. java基础编程题(1)
  5. k8s 安装
  6. IDEA 安装lombok及使用
  7. maven配置步骤
  8. MongoDB特性及使用场景
  9. django零散知识点
  10. [WPF自定义控件库]使用WindowChrome自定义RibbonWindow