博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[最大环+缩点+BFS]codeforces Round 95 Div2
阅读量:5057 次
发布时间:2019-06-12

本文共 3098 字,大约阅读时间需要 10 分钟。

 #include<iostream>

#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<
string>
#include<bitset>
#include<queue>
#include<vector>
#include<
string>
#include<cmath>
#include<map>
#include<
set>
#define rep(i,n,m) for(int i=(n);i<=(m);++i)
#define re1(i,n) rep(i,1,n)
#define re0(i,n) rep(i,0,n)
#define RE(a) ((a)*(a))
#define SIZE(a) (int((a).size()))
#define vv(a) vector<a>
#define vi vv(int)
#define vl vv(ll)
#define vb vv(bool)
//
count distance 不能用哦,已经定义了。
using 
namespace std;
typedef 
long 
long ll;
template<
class T>
void inline maxi(T &a,T &b){
    a=max(a,b);
}
template<
class T>
void inline mini(T &a,T &b){
    a=min(a,b);
}
void shownum(
int n,
int m){
    rep(i,n,m){
        cout<<setw(
6)<<i;
    }
    cout<<endl;
}
template<
class T,
class P>
void fill(T &a,P v){
    
int n=SIZE(a)-
1;
    re0(i,n)
        a[i]=v;
}
template<
class T>
void show(T &a,
int n,
int m){
    rep(i,n,m){
        cout<<setw(
6)<<a[i];
    }
    cout<<endl;
}
template<
class T>
void show(T *a[
10],
int n,
int m){
    re0(i,n){
        re0(j,m)
            cout<<a[i]<<
'
 
';
        cout<<endl;
    }
}
const 
int maxnum=
3000+
1;
const 
int maxint=
2147483647;
vi G,next,dest,timee,path;
vb vis;
void addd(
int a,
int b){
    next.push_back(G[a]);
    G[a]=SIZE(next)-
1;
    dest.push_back(b);
}
int ans,cycf,cyct;
int n;
void init(){
    scanf(
"
%d
",&n);
    G.assign(n+
1,-
1);
    timee.assign(n+
1,
0);
    vis.assign(n+
1,
false);
    path.assign(n+
1,-
1);
    ans=-
1;
    re1(u,n){
        
int a,b;
        scanf(
"
%d%d
",&a,&b);
        addd(a,b);
        addd(b,a);
    }
}
void dfs(
int s,
int t){
    vis[s]=
true;
    timee[s]=t;
    
for(
int i=G[s];i!=-
1;i=next[i]){
        
int v=dest[i];
        
if(!vis[v]){
            dfs(v,t+
1);
            path[v]=s;
        }
else{
            
int tmp=timee[v]-timee[s];
            
if(ans<tmp){
                ans=tmp;
                cycf=v;
                cyct=s;
            }
        }
    }
}
vi G2,next2,dest2,id;
void pp(
int 
from,
int to){
    
if(to==
from){
        id[
from]=
from;
    }
    
else{
        pp(
from,path[to]);
        id[to]=
from;
    }
}
set<pair<
int,
int> > S;
void makeG(){
    G2.assign(n+
1,-
1);
    id.assign(n+
1,
0);
    S.clear();
}
void addG2(
int a,
int b){
    next2.push_back(G2[a]);
    G2[a] = SIZE(next2)-
1;
    dest2.push_back(b);
}
int mmain(){
    init();
    dfs(
1,
0);
    makeG();
    re1(u,n){
        id[u]=u;
    }
    pp(cyct,cycf);
    re1(u,n){
        
for(
int i=G[u];i!=-
1;i=next[i]){
            
int v=dest[i];
            pair<
int,
int> p=make_pair(id[u],id[v]);
            
if(p.first==p.second)
                
continue;
            
set<pair<
int,
int> >::iterator it=S.find(p);
            
if(it==S.end()){
                S.insert(p);
                addG2(p.first,p.second);
            }
        }
    }
    vi final_ans(n+
1,
0),distt(n+
1,
0);
    
int Q[maxnum+
1];
    
int head=-
1,rear=
0;
    Q[rear++]=cyct;
    distt[cyct]=
1;
    final_ans[cyct]=distt[cyct]-
1;
    
while(head+
1<rear){
        
int tnode=Q[++head];
        
for(
int i=G2[tnode];i!=-
1;i=next2[i]){
            
int v=dest2[i];
            
if(!distt[v]){
                Q[rear++]=v;
                distt[v]=distt[tnode]+
1;
                final_ans[v]=distt[v]-
1;
            }
        }
    }
    re1(u,n){
        printf(
"
%d 
",final_ans[u]);
    }
    puts(
"");
    
}
#define codeforces CODEFORCES
//
#define INPUT CODEFORCES_FILE
//
#define MANY_TEST CODEFORCES_MANY_TEST
const 
int MANY_TESST=
2;
int main(){
#ifdef codeforces
    #ifdef INPUT
    freopen(
"
input.txt
",
"
r
",stdin);
    freopen(
"
output.txt
",
"
w
",stdout);
    
#endif
    #ifdef MANY_TEST
    re1(wwwwwwwwwwwwwwwwwwwww,MANY_TESST)
        mmain();
    
return 
0;
    
#endif
#endif
    mmain();
}

 

转载于:https://www.cnblogs.com/gggin/archive/2012/12/29/2839217.html

你可能感兴趣的文章
python-day17--生成器
查看>>
简单使用git上传代码
查看>>
如何实现一个php框架系列文章【4】url路由管理
查看>>
SQL excel
查看>>
POJ 1328 Radar Installation
查看>>
html5之canvas画图基础
查看>>
JS原型
查看>>
队列学哪个好
查看>>
Linux 系统信息监控统计命令小结
查看>>
Grunt的配置和使用(一)
查看>>
JavaScript小括号、中括号、大括号的多义性
查看>>
css做鼠标指向图片图片放大但边框不放大
查看>>
nodeJs hello world
查看>>
ANT 打jar包
查看>>
【技术】HTML5 canvas --- clock(1)
查看>>
操作系统的发展与分类
查看>>
东方元鼎付淼:移动互联网创业门槛已降低
查看>>
C#访问MySQL数据库的方法
查看>>
数学图形(2.25)三维悬链线与悬链面
查看>>
aspxGridview 根据单元格值得不同,设置单元格字体的颜色(设置和读取值)
查看>>