题意:找三条同起点同终点的不相交的路径

题解:用tarjan的思想,记录两个low表示最小和次小的dfs序,以及最小和次小的位置,如果次小的dfs序比dfn小,那么说明有两条返祖边,那么就是满足条件的答案

//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize(4)
//#pragma GCC optimize("unroll-loops")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
#define fi first
#define se second
#define db double
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000007
#define ld long double
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
//#define cd complex<double>
#define ull unsigned long long
//#define base 1000000000000000000
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define fin freopen("a.txt","r",stdin)
#define fout freopen("a.txt","w",stdout)
#define fio ios::sync_with_stdio(false);cin.tie(0)
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
template<typename T>inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
template<typename T>inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;} using namespace std; const double eps=1e-8;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=100000+10,maxn=50000+10,inf=0x3f3f3f3f; vi v[N],road;
int dfn[N],low[N][2],fa[N];
pii pos[N][2];
int ind;
bool ok;
void pr()
{
printf("%d",road.size());
for(int i=0;i<road.size();i++)printf(" %d",road[i]);puts("");
road.clear();
}
void tarjan(int u,int f)
{
if(ok)return ;
dfn[u]=low[u][0]=low[u][1]=++ind;
for(int i=0;i<v[u].size();i++)
{
int x=v[u][i];
if(x==f)continue;
if(!dfn[x])
{
fa[x]=u;
tarjan(x,u);
if(low[x][1]<low[u][0])
{
low[u][1]=low[u][0];
pos[u][1]=pos[u][0];
low[u][0]=low[x][1];
pos[u][0]=pos[x][1];
}
else if(low[x][1]<low[u][1])
{
low[u][1]=low[x][1];
pos[u][1]=pos[x][1];
}
if(low[x][0]<low[u][0])
{
low[u][1]=low[u][0];
pos[u][1]=pos[u][0];
low[u][0]=low[x][0];
pos[u][0]=pos[x][0];
}
else if(low[x][0]<low[u][1])
{
low[u][1]=low[x][0];
pos[u][1]=pos[x][0];
}
}
else if(dfn[x]<dfn[u])
{
if(dfn[x]<low[u][0])
{
low[u][1]=low[u][0];
pos[u][1]=pos[u][0];
low[u][0]=dfn[x];
pos[u][0]=mp(u,x);
}
else if(dfn[x]<low[u][1])
{
low[u][1]=dfn[x];
pos[u][1]=mp(u,x);
}
}
}
if(low[u][1]<dfn[u]&&!ok)
{
ok=1;
printf("%d %d\n",u,pos[u][1].se);
for(int now=u;now!=pos[u][1].se;now=fa[now])road.pb(now);
road.pb(pos[u][1].se);
pr();
road.pb(pos[u][1].se);
for(int now=pos[u][1].fi;now!=u;now=fa[now])road.pb(now);
road.pb(u);
reverse(road.begin(),road.end());
pr();
for(int now=pos[u][1].se;now!=pos[u][0].se;now=fa[now])road.pb(now);
road.pb(pos[u][0].se);
for(int now=pos[u][0].fi;now!=u;now=fa[now])road.pb(now);
road.pb(u);
reverse(road.begin(),road.end());
pr();
// for(int i=1;i<=8;i++)printf("%d %d\n",i,fa[i]);
// printf("%d %d %d %d %d %d %d %d---\n",u,dfn[u],low[u][0],pos[u][0].fi,pos[u][0].se,low[u][1],pos[u][1].fi,pos[u][1].se);
return ;
}
}
int main()
{
freopen("grand.in","r",stdin);
freopen("grand.out","w",stdout);
int T;scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
dfn[i]=low[i][0]=low[i][1]=fa[i]=0;
v[i].clear();
}
ind=0;
for(int i=0,x,y;i<m;i++)
{
scanf("%d%d",&x,&y);
v[x].pb(y),v[y].pb(x);
}
ok=0;
for(int i=1;i<=n;i++)
if(!dfn[i])
tarjan(i,-1);
if(!ok)puts("-1");
}
return 0;
}
/********************
1
8 9
1 2
1 3
4
2 5
3 6
4 7
5 8
6 8
7 8
********************/

2017-2018 ACM-ICPC, NEERC, Northern Subregional ContestG - Grand Test的更多相关文章

  1. 2018-2019 ICPC, NEERC, Southern Subregional Contest

    目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...

  2. Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest

    2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...

  3. 【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D】---暑假三校训练

    2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D Problem D. Distribution in Metagonia Input ...

  4. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 G. Garden Gathering

    Problem G. Garden Gathering Input file: standard input Output file: standard output Time limit: 3 se ...

  5. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 D. Delay Time

    Problem D. Delay Time Input file: standard input Output file: standard output Time limit: 1 second M ...

  6. 模拟赛小结:2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest

    2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest 2019年10月11日 15:35-20:35(Solved 8,Penalty 675 ...

  7. 2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest (9/12)

    $$2015-2016\ ACM-ICPC,\ NEERC,\ Northern\ Subregional\ Contest$$ \(A.Alex\ Origami\ Squares\) 签到 //# ...

  8. ACM ICPC 2016–2017, NEERC, Northern Subregional Contest Problem J. Java2016

    题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:2s 空间限制:256MB 题目大意: 给定一个数字c 用 " ...

  9. 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)

    i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...

随机推荐

  1. Python之Requests的高级用法

    # 高级用法 本篇文档涵盖了Requests的一些更加高级的特性. ## 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个Session实例发出的所有请求之间保持cookies. 会话对象 ...

  2. String comparison is too slow in R language

    ## String comparison is too slow in R language ## it will take 3 minutes, it is too slow date() strA ...

  3. JAVA JDBC 增删改查简单例子

    1.数据库配置文件jdbc.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test username= ...

  4. 题解——loj6277 数列分块入门1(分块)

    分块裸题 然后就是记得左右边界处理和分块的初始化 忘了初始化会被卡成暴力 #include <cstdio> #include <algorithm> #include < ...

  5. Hadoop【单机安装-测试程序WordCount】

    Hadoop程序说明,就是创建一个文本文件,然后统计这个文本文件中单词出现过多少次! (MapReduce 运行在本地   启动JVM ) 第一步    创建需要的文件目录,然后进入该文件中进行编辑 ...

  6. js为什么返回两个对象字符串 objcet objcet ?

    js中两个使用 toString() 对有个有对象的数组进行操作时,为什么返回两个对象字符串 objcet objcet ? [{}].toString(); 返回 "[object Obj ...

  7. 2、Python函数详解(0601)

    函数的基础概念 1.函数是python为了代码最大程度的重用和最小化代码冗余而提供的基本程序结构: 2.函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件: 3.函数用于将相关功能打包并参 ...

  8. tomcat中实现特定路径下的图片的url访问Tomcat配置图片保存路径,图片不保存在项目路径下

    使用Tomcat作为服务器的时候,如果不配置图片保存路径,将图片保存在项目路径下,那么再次打war包发布项目可能会造成图片的丢失,每次重启前将图片先保存再copy到服务器明显不方便,这时可以配置图片保 ...

  9. HYPERSPECTRAL IMAGE CLASSIFICATION USING TWOCHANNEL DEEP CONVOLUTIONAL NEURAL NETWORK阅读笔记

    HYPERSPECTRAL IMAGE CLASSIFICATION USING TWOCHANNEL  DEEP  CONVOLUTIONAL NEURAL NETWORK 论文地址:https:/ ...

  10. 基于虹软 2.0 人脸识别猜年龄 java版 demo

    首先感谢虹软,是你们提供这么好的SDK支撑了我们的想象力! 这是一个用javav编写的可视化应用,用户通过自己的脸和计算机进行交互,计算机则通过萌萌女孩的语音和用户对话.核心程序就是利用ArcFace ...