noip 2018 day2 T1 旅行 基环树 tarjan
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的更多相关文章
- noip 2018 Day2 T1 旅行
暴力删边,暴力枚举 #include <bits/stdc++.h> using namespace std; #define MAXM 5010 inline int read() { ...
- P5022 旅行[基环树]
以后必须学会面向数据编程!看半天题目不知道咋写直接爆搜,结果分少的可怜,还不如直接贪搞个60分. 观察数据,发现图至多存在一个环. 显然,如果没有环,这个题不跟你多bb,直接贪就完事了,线性复杂度. ...
- 3730 无线网络发射选址[NOIP 0214 day2 T1]
3730 无线网络发射选址 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 查看运行结果 题目描述 Description 随着智能手机的日 ...
- NOIP 2014 Day2 T1 无线网络发射器
#include<iostream> #include<cmath> #include<cstdlib> #include<cstdio> #inclu ...
- noip 2016 day2 t1组合数问题
题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...
- Codevs 3578 无线网络发射器选址== NOIP 2014 Day2 T1
3578 无线网络发射器选址 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题目描述 Description 随着智能手机的日益普及,人们对无线网的需求日益增大. ...
- noip 2018 day1 T1 铺设道路 贪心
Code: #include<cstdio> using namespace std; int main() { int last=0,ans=0; int n;scanf("% ...
- [NOIp 2018]all
Description 题库链接: Day1 T1 铺设道路 Day1 T2 货币系统 Day1 T3 赛道修建 Day2 T1 旅行 Day2 T2 填数游戏 Day2 T3 保卫王国 Soluti ...
- NOIP 2018旅行题解
从佳木斯回来刷一刷去年没A的题 题目描述 小 Y 是一个爱好旅行的 OIer.她来到 X 国,打算将各个城市都玩一遍. 小Y了解到, X国的 nn 个城市之间有 mm 条双向道路.每条双向道路连接两个 ...
随机推荐
- 没用私服,自己安装下本地jar包,制作坐标
没用私服的话,自己安装下本地jar包吧.执行下面命令即可. -Dfile 代表jar存在路径.mvn install:install-file -DgroupId=alipay -DartifactI ...
- SQL 字符串操作函数
SQL 字符串操作函数 学习了: https://www.cnblogs.com/wangzhe688/p/6046654.html 一.字符转换函数 1.ASCII() 返回字符表达式最左端字符的A ...
- Cubieboard学习资源
1.Cubieboard2学习系列学习教程. 2.Cubieboard安装server成功,ssh远程登录. 3.CubieBoard2 A20学习笔记. 4.一个学习CubieTruck的站点. 5 ...
- bzoj1934: [Shoi2007]Vote 善意的投票(显然最小割)
1934: [Shoi2007]Vote 善意的投票 题目:传送门 题解: 明显的不能再明显的最小割... st连同意的,不同意的连ed 朋友之间两两连边(即双向边) 流量都为1... 为啥: 一个人 ...
- pyspark.mllib.feature module
Feature Extraction Feature Extraction converts vague features in the raw data into concrete numbers ...
- 常见的DNS攻击——偷(劫持)、骗(缓存投毒)、打(DDos)
常见的DNS攻击包括: 1) 域名劫持 通过采用黑客手段控制了域名管理密码和域名管理邮箱,然后将该域名的NS纪录指向到黑客可以控制的DNS服务器,然后通过在该DNS服务器上添加相应域名纪录,从而使网民 ...
- 微信公众平台开发学习笔记2--获取access token
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.获取的access_token过期时间为2小时.获取access token具体说明请参考官方文档. ...
- 机器学习(七) PCA与梯度上升法 (上)
一.什么是PCA 主成分分析 Principal Component Analysis 一个非监督学的学习算法 主要用于数据的降维 通过降维,可以发现更便于人类理解的特征 其他应用:可视化:去噪 第一 ...
- js一些常用方法
string 增加 IsNullorEmpty : String.prototype.IsNullOrEmpty = function (r) { if (r === undefined || ...
- <Sicily>Brackets Matching
一.题目描述 Let us define a regular brackets sequence in the following way: Empty sequence is a regular s ...