首页 > 其他分享 >题解:CF118E

题解:CF118E

时间:2023-10-13 20:25:38浏览次数:34  
标签:无解 CF118E int 题解 flag dfn

Tarjan

思路

先来看一下题目给出的无解的这个样例。

不难发现,导致无解的两条边就是 \(6 - 7\) 和 \(2 - 4\) 这两个桥。所以这个题就转换成了求桥,如果存在桥就是无解。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,M=3e5+5;
inline int read();
int n,m,cnt=1,head[N],idx,dfn[N],low[N],anscnt;
bool flag,vis[M<<1];
struct E{
	int to,nex,u;
}edge[M<<1];
struct A{
	int x,y;
}ans[M<<1];
void add(int u,int v)
{
	edge[++cnt].to=v;
	edge[cnt].u=u;
	edge[cnt].nex=head[u];
	head[u]=cnt;
}
void tarjan(int x,int fa)
{
	dfn[x]=low[x]=++idx;
	for(int i=head[x];i;i=edge[i].nex)
	{
		int to=edge[i].to;
		if(!dfn[to])
		{
			tarjan(to,x);
			low[x]=min(low[to],low[x]);
			ans[++anscnt]=(A({x,to}));
			if(low[to]>dfn[x])
			{
				flag=1;
				return ;
			}
		}
		else if(to!=fa&&dfn[to]<dfn[x])
		{
			low[x]=min(low[x],dfn[to]);
			ans[++anscnt]=(A({x,to}));//记录一下答案
		}
	}
}
int main()
{
	n=read();m=read();
	for(int i=1;i<=m;i++)
	{
		int x,y;
		x=read();y=read();
		ans[i].x=x;ans[i].y=y;
		add(x,y);
		add(y,x);
	}
	tarjan(1,0);
	if(flag)
	{
		puts("0");
		return 0;
	}
	for(int i=1;i<=anscnt;i++)
	{
		printf("%d %d\n",ans[i].x,ans[i].y);
	}
	return 0;
}

inline int read()
{
	int x=0,f=1;
	char ch;
	ch=getchar();
	while(ch>'9'||ch<'0'){if(ch=='-') f=-f;ch=getchar();}
	while(ch<='9'&&ch>='0')
	{
		x=(x<<1)+(x<<3)+(ch&15);
		ch=getchar();
	}
    return x*f;
}

标签:无解,CF118E,int,题解,flag,dfn
From: https://www.cnblogs.com/yzxgg/p/solution-cf118e.html

相关文章

  • [AGC037D] Sorting a Grid 题解
    学长给我看了这道题,感觉很有趣啊!想了想想出来了。考虑先把每个数还原到对应行上,然后用最后一次把它们斗出来。那么我们就是要在第一次操作后,对于每种颜色使得它平铺在这个块上。那么我们直接网络流或二分图匹配构造一下方案就做完力!......
  • Codeforces 512D. Fox And Travelling 题解
    FoxAndTravelling题面翻译给定一张\(n\)个点\(m\)条边的无向图。一个点只有当与它直接相连的点中最多只有一个点未被选择过时才可被选择。询问对于每个\(k\in[0,n]\),有序选择\(k\)个点的方案数。\(n\le100\),\(m\le\frac{n(n-1)}2\),答案对\(10^9+9\)取模。......
  • 洛谷P9290 [ROI 2018] Decryption 题解
    include<bits/stdc++.h>pragmaGCCoptimize(1)pragmaGCCoptimize(2)pragmaGCCoptimize(3,"Ofast","inline")defineregregisterdefineintlonglongusingnamespacestd;inlineintread(){shortf=1;intx=0;charc=getchar();......
  • Sqoop不能正常导出文件到Mysql数据库的问题解决
    之前在使用sqoop输入以下命令时bin/sqoopexport\--connectjdbc:mysql://node1:3306/journal\--usernameroot\--password123456\--tabletop_courses_by_traffic\--export-dir/user/hive/warehouse/journal.db/top_courses_by_traffic--input-fields-terminated-......
  • King's Tour 题解
    King'sTour题面大意在\(n\timesm\)的网格中构造一种从\((1,1)\)走到\((a,b)\)的方案,要求经过所有格子恰好一次,格子之间八联通。思路分析模拟赛题,赛时写了一个半小时过了(思路不是很复杂,但是需要一些分类讨论。引理:对于任意大小的矩形,一定存在从左上走到右下的方案......
  • 【多校联考NOIP#3】比赛复盘 && 题解
    A.卡牌这次比赛,一道签到题都没有。本来以为是线段树上二分。就类似于花神的数论题那道,刚开始暴力修改(修改到线段树的每一个叶子节点),然后由于boss的attack在不断增加,到了\(Att_i>=hp_j\)的时候,\(j\)这个牌顶多打一次,如果一个区间的\(max\)都小于boss的攻击力了,那么就不......
  • CF1886A Sum of Three 题解
    Question给定一个正整数N,我们需要找三个不同的整数x,y,z,使得N=x+y+z,其中下x,y,z不能被三整除solution我们把N%3会有一些余数,我们针对余数来讨论,其中我们只关注xyz的余数如果余数为0那么也就可能是1+1+1,或者2+2+2,但是考虑到xyz不同,所以如果\(xyz\%3\)相同的话,\(xyz/3\)......
  • 题解 P2188 小Z的 k 紧凑数
    题目描述小Z在草稿纸上列出了很多数,他觉得相邻两位数字差的绝对值不超过\(k\)的整数特别奇特,称其为\(k\)紧凑数。现在小Z想知道\([l,r]\)内有多少个\(k\)紧凑数,希望你帮帮他。具体思路首先,要求数的个数,自然想到数位dp。然后可以用容斥原理拆询问。\[ans=\sum_{......
  • CF1886C Decreasing String 题解
    题面\(S_n\)由\(S_{n-1}\)去掉一个字母得到,\(S=S_1+S_2+...+S_n\)给定\(S_1\)求\(S\)的第\(N\)位solution我们先考虑怎样去字母能保持字典序最小显然,我们发现如果一个字母比前面那个字母小,那么我们就要删除前面那个字母也就是我们要删除一些字母,保持剩余的字母单调......
  • CF1886B Fear of the Dark 题解
    QuestionMonocarp在一个二维平面上,他的初始点在\(O=(0,0)\),他需要到\(P(P_x,P_y)\)不幸的是,他能走的范围在两个圆内,我们给出了两个圆的坐标\(A=(A_x,A_y)\),\(B=(B_x,B_y)\)两个圆的半径相同,我们需要找到最小的半径让Monocarp能同\(O\)走到\(P\)Solution这题可以......