The Wall has down and the King in the north has to send his soldiers to sentinel.
The North can be regard as a undirected graph (not necessary to be
connected), one soldier can cover one path. Today there's no so many
people still breathing in the north, so the King wants to minimize the
number of soldiers he sent to cover each edge exactly once. As a master
of his, you should tell him how to arrange soldiers.
InputThere might be multiple test cases, no more than 20. You need to read till the end of input.

In the first line, two integers n and m, representing the number of nodes and edges in the graph.

In the following m lines, each contain two integers, representing two ends of an edge.

There are no parallel edges or self loops.

1≤n,m≤100000
OutputFor each test case, the first line contains number of needed routes, p.

For the following p lines, an integer x in the beginning, followed
by x integers, representing the list of used edges. Every integer should
be a positive or negative integer. Its absolute value represents the
number of chosen edge (1~n). If it's positive, it shows that this edge
should be passed as the direction as the input, otherwise this edge
should be passed in the direction different from the input. Edges should
be in correct order.Sample Input

3 3
1 2
1 3
2 3

Sample Output

1
3 1 3 -2

思路:把奇点配对,然后求欧拉回路。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int Laxt[maxn],Next[maxn<<],To[maxn<<],cnt,num;
int x[maxn],y[maxn],ind[maxn]; bool used[maxn],vis[maxn<<];
vector<int>G[maxn]; int tot,M;
void add(int u,int v)
{
Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v; vis[cnt]=;
}
void dfs(int u,int f)
{
used[u]=;
for(int &i=Laxt[u];i;i=Next[i]){
if(!vis[i]){
vis[i]=vis[i^]=;
dfs(To[i],i);
}
}
if(!f) return ;
if(f<=(M<<|)) G[tot].push_back(f&?(f>>):-(f>>));
else tot++;
}
int main()
{
int N;
while(~scanf("%d%d",&N,&M)){
rep(i,,M) scanf("%d%d",&x[i],&y[i]);
cnt=; tot=;
rep(i,,N) Laxt[i]=used[i]=ind[i]=;
rep(i,,M) {
add(x[i],y[i]); add(y[i],x[i]);
ind[x[i]]++; ind[y[i]]++;
}
int x=;
rep(i,,N) {
if(ind[i]&){
if(x) add(x,i), add(i,x),x=;
else x=i;
}
}
rep(i,,N) if(!used[i]&&(ind[i]&)){
tot++; dfs(i,); tot--;
}
rep(i,,N) if(!used[i]&&ind[i]) {
tot++; dfs(i,);
}
printf("%d\n",tot);
rep(i,,tot) {
printf("%d",G[i].size()); int L=G[i].size();
rep(j,,L-) printf(" %d",G[i][j]); puts("");
}
rep(i,,tot) G[i].clear();
}
return ;
}

HDU - 6311:Cover(欧拉回路,最少的一笔画覆盖无向图)的更多相关文章

  1. HDU 6311 Cover (无向图最小路径覆盖)

    HDU 6311 Cover (无向图最小路径覆盖) Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...

  2. HDU - 6311 Cover(无向图的最少路径边覆盖 欧拉路径)

    题意 给个无向图,无重边和自环,问最少需要多少路径把边覆盖了.并输出相应路径 分析 首先联通块之间是独立的,对于一个联通块内,最少路径覆盖就是  max(1,度数为奇数点的个数/2).然后就是求欧拉路 ...

  3. HDU - 6311 Cover (欧拉路径)

    题意:有最少用多少条边不重复的路径可以覆盖一个张无向图. 分析:对于一个连通块(单个点除外),如果奇度数点个数为 k,那么至少需要max{k/2,1}  条路径.将奇度数的点两两相连边(虚边),然后先 ...

  4. hdu 5386 Cover (暴力)

    hdu 5386 Cover Description You have an matrix.Every grid has a color.Now there are two types of oper ...

  5. HDU 6311 最少路径覆盖边集 欧拉路径

    Cover Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. hdu 6311 欧拉回路

    题意:求一个图(不一定联通)最小额外连接几条边,使得可以一笔画出来 大致做法 1.找出联通块 2.统计每一个连通块里面度数为奇数的点的个数, 有一个性质 一个图能够用一笔画出来,奇数点的个数不超过2个 ...

  7. hdu 1150 Machine Schedule 最少点覆盖转化为最大匹配

    Machine Schedule Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  8. hdu 1150 Machine Schedule 最少点覆盖

    Machine Schedule Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  9. HDOJ 1878 欧拉回路 nyoj 42一笔画问题

    #include<cstdio> #include<cstring> ]; int find(int x) { if(visited[x]!=x) return find(vi ...

随机推荐

  1. SetCommMask

    SetCommMask           用途:设置串口通信事件   原型:BOOL SetCommMask(HANDLE hFile, //标识通信端口的句柄   DWORD dwEvtMask ...

  2. 虚函数_构造函数_测试_VS2010x86

    1.控制台测试代码: #include <stdio.h> #include <windows.h> class A { public: A() { printf(" ...

  3. SpringMVC实现多种数据类型绑定

    绑定基本数据类型 Java基本数据类型int的默认值是0,在使用int进行url传递参数时,参数key是必须写的,其值也只能是int类型的,否则将会报错. 比如方法: @RequestMapping( ...

  4. Jsp基础语法(由简入杂)

    JSP基础语法 一,JSP简介 Jsp是一个简化的Servlet设计,是在服务器端执行,他实现了再Java中使用HTML标签. Jsp是一种动态网页技术标准也是JAVAEE的标准 二,常见动态网站开发 ...

  5. git/ssh备查文档

    配置多个ssh key: 待更新 git速查表: git remote set-url origin(远程仓库名称) https://xxxxx/ProjectName.git  从ssh切换至htt ...

  6. Java的JDK和JRE

    Java的JDK和JRE 1.计算机交互方式 图形化界面(Graphical User Interface GUI) 命令行方式(Command Line Interface CLI) 2.Java语 ...

  7. ArcGIS 要素闪烁

    ArcGIS 要素闪烁 通过双击要素图例,闪烁定位到要素,并且闪烁一段时间: IFeatureLayer featureLayer = layer as IFeatureLayer;          ...

  8. 12月6日 看Active Record validation ; 做jdstore ,注意gem bootstrap 版本只支持bootstrap3。

    Active Record validation: new_record?()//用于验证刚新建,但没存入database中的数据 ,返回true或false persisted?() //和new_ ...

  9. AC自动机练习

    多模板串匹配一般有两种方法 暴力kmp, 适用于模板串少的情形 直接trie上暴力, 适用于模板串比较短的情形, 并且可以动态插入合并 建立AC自动机, 复杂度是严格线性的, 但不能动态插入 cons ...

  10. ZOJ 2770 差分约束+SPFA

    Burn the Linked Camp Time Limit: 2 Seconds      Memory Limit: 65536 KB It is well known that, in the ...