一、题目
题目
给你一张可能有重边的不保证联通的无向图,现在要在这个图上找出两条路径,恰好能覆盖所有边一次,根据边的编号输出方案,无解输出-1。
数据范围
1 ≤ m ≤ 10000 , 1 ≤ a , b ≤ 10000 , a ̸ = b 1\leq m\leq 10000,1\leq a,b\leq10000 ,a\not=b 1≤m≤10000,1≤a,b≤10000,a̸=b
二、解法
思路
由于组成欧拉路的条件较为单一,我们来分类讨论一下。
(下文将会把度为奇数的点称为奇点)
1、有一个连通块,奇点数为 0 , 2 0,2 0,2,那我们随便选择一条边组成一个路径,另外的边组成另一条路径。
2、有一个连通块,奇点数为 4 4 4,那我们将两个奇数点连一条虚边,等于将图分成两个部分,从一个奇点出发,看能不能形成一条路径(实质上是题意中的两条)。
3、有两个连通块,奇点数取 0 , 2 0,2 0,2,直接跑即可。
代码
有很多细节没讲清楚,代码中会有详细注释。
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
#define INF 0x3f3f3f3f
const int MAXN = 10005;
int read()
{
int num=0,flag=1;
char c;
while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;
while(c