小N研究的NP完全问题
Description
Solution
什么NP完全问题……
这个就是一道水题。
首先我们可以想到建一个图,但是不知所措。
因为每一个点都可以左右选择,那么就是可以把一个奇数状态转移成偶数状态。
那么我们一开始就随便放,然后再一个点连接的相邻的两个点进行连边,表示可以转移状态。
我们会发现很多个联通块,如果联通块里面有奇数个权值为奇数的点,那么就答案只能加一了,很显然。
那么我们怎么找方案数呢?
一个dfs,建出一颗dfs树
一个权值为奇数的点,那么就表示这个点可以向上串1个1。
我们发现子树有奇数个权值为奇数的节点,那么就表示这些1怎么上传都不能化成偶数,那么这个父节点与它向上的连边的这一条边选择的点的方向就要改一下了,好好理解一下,就好了。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define fo(i,a,b) for(i=a;i<=b;i++)
const int maxn=200007;
using namespace std;
int i,j,k,l,t,n,m,ans;
int first[maxn*2],next[maxn*2],last[maxn*2],num,shu[maxn*2];
int a[maxn*2],b[maxn*2],c[maxn*2],d[maxn*2],tot;
bool bz[maxn];
void add(int x,int y,int z){last[++num]=y;next[num]=first[x];first[x]=num;shu[num]=z;
}
int dfs(int x){int i,j=c[x]%2,k;bz[x]=1;for(i=first[x];i;i=next[i]){if(!bz[last[i]]){k=dfs(last[i]);d[shu[i]]=k%2;j+=k;}}return j;
}
int dfs1(int x){int i,j=c[x]%2;bz[x]=1;for(i=first[x];i;i=next[i]){if(!bz[last[i]]){j+=dfs1(last[i]);}}return j%2;
}
int main(){scanf("%d%d",&n,&m);fo(i,1,n){scanf("%d%d",&a[i],&b[i]);c[a[i]]++;}fo(i,1,n){add(a[i],b[i],i);add(b[i],a[i],i);}fo(i,1,m){if(!bz[i]&&dfs1(i))ans++;}printf("%d\n",ans);memset(bz,0,sizeof(bz));fo(i,1,m){if(!bz[i])t=dfs(i);}fo(i,1,n){if(d[i]%2==0)printf("%d ",a[i]);else printf("%d ",b[i]);}
}
小N研究的NP完全问题相关推荐
- 【算法】NP完全问题以及世界数学七大难题
NP完全问题(NP-C问题),是世界七大数学难题之一. 1.NP完全问题 P (确定性多项式算法)对NP (非确定性多项式算法) 人们发现,所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题 ...
- 什么是NP问题,什么是NP hard问题,什么是NP完全问题。
http://www.cs.pitt.edu/~ztliu/wordpress/2011/05/np-problem/ 首先解释一下什么是NP问题,什么是NP hard问题,什么是NP完全问题. 看下 ...
- 由NP完全问题引出动态规划——状态压缩DP
" 所有部分都应当在非强制的情况下组合回一起.要记住,你重组的那部分原来就是你拆解的.因此,如果你不能让它们组合回来的话,那一定是有原因的.要想尽一切办法,除了用锤头." – IB ...
- 算法4类问题:P问题、NP问题、NP完全问题、NP难问题
在讲P类问题之前先介绍两个个概念:多项式,时间复杂度. 1.多项式:axn-bxn-1+c 称为x最高次为n的多项式 2.时间复杂度 时间复杂度表示所需的计算工作量,当输入值接近无穷时,算法所需工作量 ...
- 算法中的P问题、NP问题、NP完全问题和NP难问题梳理
结论(可以简单这么初步认识):NPH>NPC>NP>或=P 在讲P类问题之前先介绍两个个概念:多项式,时间复杂度.(知道这两概念的可以自动跳过这部分) 1.多项式: axn−bxn− ...
- [总结]算法中的P问题、NP问题、NP完全问题和NP难问题
在讨论算法的时候,常常会说到这个问题的求解是个P类问题,或者是NP难问题等等,于是我特地搜了这方面的资料,自己总结了下,估计研究算法的大家应该都知道,要是我总结的哪里不对,欢迎一起探讨~ 在讲P类问题 ...
- 算法中的P问题、NP问题、NP完全问题和NP难问题
在讨论算法的时候,常常会说到这个问题的求解是个P类问题,或者是NP难问题等等,于是我特地搜了这方面的资料,自己总结了下,估计研究算法的大家应该都知道,要是我总结的哪里不对,欢迎一起探讨~ 在讲P类问题 ...
- P、NP、NPC(NP完全问题)、NP-hard问题概述
P.NP.NPC(NP完全问题).NP-hard问题概述 一.概念总结 1.P问题: 能在多项式时间内解决的问题 2.NP问题: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时 ...
- np完全问题的例子_MIT开发光子算法,试图解决世界7大数学难题的“NP完全问题”...
2000年5月,美国克雷数学研究所(Clay Mathematics Institute,CMI)提出7个数学难题,称为"千禧年大奖难题",挑战者每解出1道题目,若通过两年验证期和 ...
最新文章
- Idea不能新建package的解决
- 19.7 主动模式和被动模式 添加监控主机 添加自定义模板 处理图形
- Selenium3自动化测试——12.上传文件功能
- (转)FFMPEG解码H264拼帧简解
- 西安电子科技大学泄漏信息
- Tornado学习笔记(四)
- 利用SAP Cloud Platform control center给global账号分配服务
- 单片机小白学步系列(十四) 点亮第一个LED的程序分析
- Python学习笔记之列表(三)
- Flume-概述-安装
- HDU1850 Being a Good Boy in Spring Festival【Nim博弈】
- Android图片与旋转
- asr语音转写_利用Real-time ASR语音转写服务实现直播实时弹幕提升用户体验
- matlab eps 字体,matlab eps 字体用AI打开乱码的解决
- 001信息化和信息系统
- 库克考虑卸任苹果 CEO,谁会是下一任接班人?
- 华为认证数据库工程师HCIA-GaussDB V1.5(中文版)发布通知
- 【硬件通信协议】4. 详细解析CAN总线通信协议
- ipad iphone开发_如何在iPhone或iPad上更改DNS服务器
- 《掌舵》-还原一个真实的政商圈
热门文章
- 【java】java天气消息推送至微信公众号详细教程
- 高等数学在计算机中的应用论文1500字,大学高等数学论文1500_大学数学论文_高等数学论文三千...
- git的基本使用方法,操作详解(如何拉取代码,上传代码)
- 12、pandas 数据类型转换
- WebApi 将 DataRow、DataTable转换成JObject返回
- java无规则简历解析
- Android通过代码生成长图并保存本地
- Linux笔记 No.28---( rsync服务、SSH服务)
- 立创开源|基于国产雅特力制作的多层全键自定义小键盘
- 面向CCF目录中的论文暴力爬取实现