题目链接:http://www.codechef.com/JAN14/problems/SEAGRP

【题意】

给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1.

【分析】

从结论入手,每个点的度恰好为1,那么就意味着每个点只能连接一个点,这样问题就转化为图中的点能否刚好两两配对。

对于奇数个点肯定是不行的,因为一定存在一个点不存在与之配对的点。
    如果点是偶数,那么就要求这个图的最大匹配,看匹配树是否为点数的一半。

求匹配的方法和二分图类似,不断找增广路更新匹配数就好了。

【代码】

第一次手写增广路代码~写的时候忘记判断增广路是否重点了于是WA了,还好后来想到了。

 #include <stdio.h>
#include <string.h>
#include <cmath>
#include <iostream>
#include<algorithm>
using namespace std;
int n,m;
int map[][];
int match[][];
int du[];
int path[];
bool ifv[];
int be;
bool dfs(int i,int k)
{
if ((k&) && !du[i] )
{
int t=k-;
while (t>=)
{
if (match[i][path[t]]==) {++du[i];++du[path[t]];}
else {--du[i];--du[path[t]];}
match[i][path[t]]=!match[i][path[t]];
match[path[t]][i]=!match[path[t]][i];
i=path[t];
--t;
}
return true;
}
for (int j=;j<=n;++j)
{
if (map[i][j]==-) continue;
if (match[i][j]!=(k&) ) continue;
if (ifv[j]) continue;
path[k]=i;
ifv[j]=true;
if (dfs(j,k+)) return true;
}
return false;
}
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
memset(map,-,sizeof map);
memset(match,,sizeof match);
memset(du,,sizeof du);
scanf("%d%d",&n,&m);
for (int i=;i<m;++i)
{
int a,b;
scanf("%d%d",&a,&b);
map[a][b]=map[b][a]=;
}
if (n&) puts("NO");
else
{
int ans=;
for (int i=;i<=n;++i)
{
memset(ifv,,sizeof ifv);
ifv[i]=true;
if (!du[i] && dfs(i,)) ++ans;
}
if (ans==n/) puts("YES"); else puts("NO");
}
}
}

codechef January Challenge 2014 Sereja and Graph的更多相关文章

  1. codechef January Challenge 2017 简要题解

    https://www.codechef.com/JAN17 Cats and Dogs 签到题 #include<cstdio> int min(int a,int b){return ...

  2. CodeChef November Challenge 2014

    重点回忆下我觉得比较有意义的题目吧.水题就只贴代码了. Distinct Characters Subsequence 水. 代码: #include <cstdio> #include ...

  3. Codechef March Challenge 2014——The Street

    The Street Problem Code: STREETTA https://www.codechef.com/problems/STREETTA Submit Tweet All submis ...

  4. 【分块+树状数组】codechef November Challenge 2014 .Chef and Churu

    https://www.codechef.com/problems/FNCS [题意] [思路] 把n个函数分成√n块,预处理出每块中各个点(n个)被块中函数(√n个)覆盖的次数 查询时求前缀和,对于 ...

  5. 刷漆(Codechef October Challenge 2014:Remy paints the fence)

    [问题描述] Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏, ...

  6. [Codechef October Challenge 2014]刷漆

    问题描述 Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏,木板 ...

  7. Codechef December Challenge 2014 Chef and Apple Trees 水题

    Chef and Apple Trees Chef loves to prepare delicious dishes. This time, Chef has decided to prepare ...

  8. codechef September Challenge 2017 Sereja and Commands

    ———————————————————————————— 这道题维护一下原序列的差分以及操作的差分就可以了 记得倒着差分操作 因为题目保证操作2的l r 小与当前位置 #include<cstd ...

  9. AC日记——The Street codechef March challenge 2014

    The Street 思路: 动态开节点线段树: 等差序列求和于取大,是两个独立的子问题: 所以,建两颗线段树分开维护: 求和:等差数列的首项和公差直接相加即可: 取大: 对于线段树每个节点储存一条斜 ...

随机推荐

  1. JSP文件下载时文件名在ie和firefox下面文件名不一致极其超链接中文乱码的问题的改进

    response.setContentType("application/octet-stream;charset=UTF-8"); fileName=java.net.URLEn ...

  2. sql 自连接

    这是一个部门表,里面存放了部门及其上级部门,但都放在同一张表中,我们假设现在需要用SQL查询出各部门及其上级部门!就如何做,当然,不用自连接也一样,可以如下: 我们达到预期目的!在这个查询中使用了一个 ...

  3. 函数 MultiByteToWideChar() 详解

    函数原型: int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cchMultiByte ...

  4. 钉钉开发笔记(3)MySQL的配置

    最近在编写web的过程中,经常需要与后台工作人员互动.由于比较麻烦.没有效率. 就果断的请教了,公司的后台大牛,学习下数据库的一些简单操作,现在就把利用MySQL连接服务器, 进行可视化操作的简单步骤 ...

  5. 关于使用Transaction对于非数据库事务的操作

    在操作数据库的过程中,为了数据的一致性,我们可以使用Transaction,要么成功的时候全部提交,要么有任何一个操作失败立即全部回滚.不仅仅是在数据库方面,有时候操作其他的内容,比如说对于系统文件的 ...

  6. U8记账凭证修改方法汇总

    在输入记账凭证时,尽管账务系统提供了多种控制错误的措施,但错误凭证的出现是难免的,为此,系统必须能够提供对错误凭证修改的功能.目前,许多财 务软件(如:用友.安易.三门)都提供了“反审核.反记账.反结 ...

  7. CSS 强制换行和禁止换行学习

    强制换行       1.word-break: break-all;       只对英文起作用,以字母作为换行依据.       2.word-wrap: break-word;   只对英文起作 ...

  8. opencv官网

    http://wiki.opencv.org.cn/index.php/Template:Doc

  9. 【JavsScript】webapp的优化整理

    单页or多页 webapp 现状 优劣之分 网络传输优化 综述 fake页-首屏加速 降低请求数 降低请求量 缓存Ajax/localstorage DOM操作优化 综述 关于页面渲染 减少使用定位属 ...

  10. [ES6] 14. Generator -- 1. yield & next()

    Generators in ECMAscript 6 are first-class coroutines that produce encapsulated suspended execution  ...