题目链接: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. linux TCP数据包重传过程----小结

    于TCP/IP协议栈的TCP协议的重传功能是由在linux内核源码(net/ipv4/tcp_output.c)中的函数tcp_retransmit_skb()实现的 代码如下: /* This re ...

  2. 谈Android四大组件之Service篇

    Service简介 Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序.Service必须在AndroidManifest.xml中声明 ...

  3. 【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布 ...

  4. android Notification和NotificationManager的使用

    Notification和NotificationManager 1.Broadcast Receiver组件没有提供可视化的界面来显示广播信息.这里我们可以使用Notification和Notifi ...

  5. 去除移动端 a标签 点击有一个 阴影效果

    outline: none;appearance:none;  -webkit-tap-highlight-color: transparent;   

  6. js中的this和apply

    this是js的一个关键字,随着函数使用场合不同,this的值会发生变化.但是总有一个原则,那就是this指的是调用函数的那个对象. 1.纯粹函数调用. function test() { this. ...

  7. Java数据结构之线性表

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  8. JavaWeb-10(会话技术之session&amp;JSP)

    JavaWeb-会话技术之session&JSP 会话管理之Session技术 一.Session 在WEB开发中,server能够为每一个用户浏览器创建一个会话对象(session对象),注 ...

  9. Android——ViewGroup的一个用法实例(转载)

    找了很久,终于找到了. <?xml version="1.0" encoding="UTF-8" ?> <merge xmlns:androi ...

  10. [Angular 2] Share a Service Across Angular 2 Components and Modules

    Services are used to share data between components. They follow a module pattern that allows you to ...