Code:

#include<cstdio>
#include<cstring>
#include<string>
#include<stack>
#include<algorithm>
#include<vector>
using namespace std;
void setIO(string a){
freopen((a+".in").c_str(),"r",stdin);
freopen((a+".out").c_str(),"w",stdout);
} const int maxn = 5009;
int low[maxn], pre[maxn], idx[maxn], A[maxn], B[maxn], ab;
bool is[maxn][maxn];
vector<int>G[maxn], idxx[maxn];
stack<int>S;
int n,m,scc, num;
void addedge(int u,int v){ G[u].push_back(v); }
void tarjan(int u,int fa){
low[u]=pre[u]=++scc;
S.push(u);
for(int i=0;i<G[u].size();++i){
if(G[u][i]==fa) continue;
if(!pre[G[u][i]]) {
tarjan(G[u][i],u);
low[u]=min(low[u],low[G[u][i]]);
}
else if(!idx[G[u][i]]) low[u]=min(low[u],pre[G[u][i]]);
}
if(low[u]==pre[u])
{
++num;
for(;;){
int g=S.top();S.pop();
idxx[num].push_back(g);
idx[g]=num;
if(g==u) break;
}
}
}
int tag[maxn], arr[maxn][maxn], p, current;
void dfs(int u){
arr[current][++p]=u;
tag[u]=1;
int siz=G[u].size();
for(int i=0;i<siz;++i){
if(tag[G[u][i]] || is[u][G[u][i]]) continue;
dfs(G[u][i]);
}
}
int main(){
//setIO("travel");
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
int a,b;
scanf("%d%d",&a,&b);
addedge(a,b);
addedge(b,a);
}
for(int i=1;i<=n;++i){
int siz=G[i].size();
sort(G[i].begin(),G[i].end());
}
tarjan(1,0);
for(int i=1;i<=num;++i){
if(idxx[i].size()>1) {
int siz=idxx[i].size();
for(int j=0;j<siz;++j)
for(int k=j+1;k<siz;++k) A[++ab]=idxx[i][j],B[ab]=idxx[i][k];
break;
}
}
if(ab==0) { dfs(1); for(int i=1;i<=n;++i) printf("%d ",arr[0][i]); return 0;}
for(int i=1;i<=ab;++i){
p=0;
++current;
memset(tag,0,sizeof(tag));
is[A[i]][B[i]]=is[B[i]][A[i]]=1;
dfs(1);
is[A[i]][B[i]]=is[B[i]][A[i]]=0;
}
int cur_best=1;
for(int i=2;i<=current;++i){
for(int j=1;j<=n;++j) if(arr[cur_best][j]!=arr[i][j]){
if(arr[cur_best][j]>arr[i][j]) cur_best=i;
break;
}
}
for(int i=1;i<=n;++i) printf("%d ",arr[cur_best][i]);
printf("\n");
return 0;
}

  

noip 2018 day2 T1 旅行 基环树 tarjan的更多相关文章

  1. noip 2018 Day2 T1 旅行

    暴力删边,暴力枚举 #include <bits/stdc++.h> using namespace std; #define MAXM 5010 inline int read() { ...

  2. P5022 旅行[基环树]

    以后必须学会面向数据编程!看半天题目不知道咋写直接爆搜,结果分少的可怜,还不如直接贪搞个60分. 观察数据,发现图至多存在一个环. 显然,如果没有环,这个题不跟你多bb,直接贪就完事了,线性复杂度. ...

  3. 3730 无线网络发射选址[NOIP 0214 day2 T1]

    3730 无线网络发射选址  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题解  查看运行结果     题目描述 Description 随着智能手机的日 ...

  4. NOIP 2014 Day2 T1 无线网络发射器

    #include<iostream> #include<cmath> #include<cstdlib> #include<cstdio> #inclu ...

  5. noip 2016 day2 t1组合数问题

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  6. Codevs 3578 无线网络发射器选址== NOIP 2014 Day2 T1

    3578 无线网络发射器选址 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题目描述 Description 随着智能手机的日益普及,人们对无线网的需求日益增大. ...

  7. noip 2018 day1 T1 铺设道路 贪心

    Code: #include<cstdio> using namespace std; int main() { int last=0,ans=0; int n;scanf("% ...

  8. [NOIp 2018]all

    Description 题库链接: Day1 T1 铺设道路 Day1 T2 货币系统 Day1 T3 赛道修建 Day2 T1 旅行 Day2 T2 填数游戏 Day2 T3 保卫王国 Soluti ...

  9. NOIP 2018旅行题解

    从佳木斯回来刷一刷去年没A的题 题目描述 小 Y 是一个爱好旅行的 OIer.她来到 X 国,打算将各个城市都玩一遍. 小Y了解到, X国的 nn 个城市之间有 mm 条双向道路.每条双向道路连接两个 ...

随机推荐

  1. 没用私服,自己安装下本地jar包,制作坐标

    没用私服的话,自己安装下本地jar包吧.执行下面命令即可. -Dfile 代表jar存在路径.mvn install:install-file -DgroupId=alipay -DartifactI ...

  2. SQL 字符串操作函数

    SQL 字符串操作函数 学习了: https://www.cnblogs.com/wangzhe688/p/6046654.html 一.字符转换函数 1.ASCII() 返回字符表达式最左端字符的A ...

  3. Cubieboard学习资源

    1.Cubieboard2学习系列学习教程. 2.Cubieboard安装server成功,ssh远程登录. 3.CubieBoard2 A20学习笔记. 4.一个学习CubieTruck的站点. 5 ...

  4. bzoj1934: [Shoi2007]Vote 善意的投票(显然最小割)

    1934: [Shoi2007]Vote 善意的投票 题目:传送门 题解: 明显的不能再明显的最小割... st连同意的,不同意的连ed 朋友之间两两连边(即双向边) 流量都为1... 为啥: 一个人 ...

  5. pyspark.mllib.feature module

    Feature Extraction Feature Extraction converts vague features in the raw data into concrete numbers ...

  6. 常见的DNS攻击——偷(劫持)、骗(缓存投毒)、打(DDos)

    常见的DNS攻击包括: 1) 域名劫持 通过采用黑客手段控制了域名管理密码和域名管理邮箱,然后将该域名的NS纪录指向到黑客可以控制的DNS服务器,然后通过在该DNS服务器上添加相应域名纪录,从而使网民 ...

  7. 微信公众平台开发学习笔记2--获取access token

    access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.获取的access_token过期时间为2小时.获取access token具体说明请参考官方文档. ...

  8. 机器学习(七) PCA与梯度上升法 (上)

    一.什么是PCA 主成分分析 Principal Component Analysis 一个非监督学的学习算法 主要用于数据的降维 通过降维,可以发现更便于人类理解的特征 其他应用:可视化:去噪 第一 ...

  9. js一些常用方法

    string 增加 IsNullorEmpty : String.prototype.IsNullOrEmpty = function (r) {    if (r === undefined || ...

  10. <Sicily>Brackets Matching

    一.题目描述 Let us define a regular brackets sequence in the following way: Empty sequence is a regular s ...