晋城一中oj 议员秘密
【问题描述】
某国有N个议员,大佬XDD要从中选出来一部分一起喝茶谈一些事情。某两个议员之间可能存在矛盾,大佬XDD不希望选出来的这些议员之间有任何矛盾关系,以至于喝喝茶的场面搞得很尴尬。
已知这些议员之间存在M对矛盾关系,你能否帮助大佬XDD计算出他最多可以选出多少个议员来喝茶谈事情?
如果聪明的你把议员看成点,把矛盾关系看成无向边,那么题目中的数据保证M对矛盾所构成的图中不存在含有超过3个点的环。(图1符合要求,图2则不符合)
【输入数据】
输入文件的第一行是用空格隔开的两个整数N和M,表示一共有N个议员,这些议员之间有M对矛盾关系。接下来的M行,每行将有一对整数a和b(用空格隔开),表示议员a与议员b有矛盾。输入数据保证不含重边和自环。(议员的编号都是从1开始的)
【输出数据】
输出一行,包含一个整数,即大佬XDD最多可以选出多少议员来喝茶谈事情。
【输入输出样例】
secret.in
5 6
1 2
3 2
1 3
3 5
3 4
4 5
secret.out
2
【样例说明】
某国有6个议员,矛盾关系中1 - 2 - 3组成一个环,3 - 4 - 5组成一个环,因此只能在这两个环中分别选一个议员,并且不能选择3号议员。
【数据规模与约定】
对于20%的数据,1 ≤ N ≤ 20
对于40%的数据,1 ≤ N ≤ 50
对于100%的数据,1 ≤ N ≤ 200
输入数据保证合法。
【分析】
丫就是个树形dp…只不过有可能一个父节点的两个子节点相互矛盾…特判一下就好了
dp[u][0]代表不选u时的最多人数
dp[u][1]代表选u时的最多人数
注意一下…数据是森林…要不然会被坑掉20分
【代码】
#include<cstdio>
#include<iostream>
#include<cstring>
#define M(a) memset(a,0,sizeof a)
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
const int mxn=205;
int dp[mxn][2],dep[mxn],cun[mxn]; //1选 or 0不选
int n,m,cnt;
bool con[mxn][mxn];
inline void dfs(int u,int fa)
{int i,j,v,cnt=0;int tmp[mxn];bool vis[mxn];memset(vis,0,sizeof vis);fo(v,1,n) if(v!=fa && con[u][v] && !dep[v]) dep[v]=dep[u]+1;fo(v,1,n) if(v!=fa && con[u][v] && dep[v]==dep[u]+1){dep[v]=dep[u]+1;tmp[++cnt]=v;dfs(v,u);}fo(i,1,cnt){fo(j,i+1,cnt){int t1=tmp[i],t2=tmp[j];if(con[t1][t2]){dp[u][0]+=max(dp[t1][0]+dp[t2][0],max(dp[t1][1]+dp[t2][0],dp[t1][0]+dp[t2][1]));vis[t1]=vis[t2]=1;break;}}}fo(i,1,cnt){v=tmp[i];dp[u][1]+=dp[v][0];if(vis[v]) continue;dp[u][0]+=max(dp[v][0],dp[v][1]);}dp[u][1]++;
}
int main()
{
// freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);int i,j,u,v,ans=0;scanf("%d%d",&n,&m);while(m--){scanf("%d%d",&u,&v);con[u][v]=con[v][u]=1;}fo(i,1,n)if(!dp[i][1]){dep[i]=1;dfs(i,0);cun[++cnt]=i;}fo(i,1,cnt) ans+=max(dp[cun[i]][0],dp[cun[i]][1]);printf("%d\n",ans);return 0;
}
晋城一中oj 议员秘密相关推荐
- 晋城一中oj 神奇的序列
1.神奇的序列 (sum.pas/c/cpp) [问题描述] 开门见山,直截了当!如果一个以0开头的整数序列中,任意两个相邻的项相差为±1,则我们说这个整数序列是"一序列".即如果 ...
- 一中OJ #3514 礼物 | 暴搜 + 剪枝 | 解题报告
一中OJ | #3514 礼物 时限 1000MS/Case 内存 128MB/Case 题目描述 你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1,宝物2的体积为S2,价值 ...
- 2021阳城一中高考成绩查询,山西高考分数线,晋城一中、阳城一中高考捷报这里都有...
原标题:山西高考分数线,晋城一中.阳城一中高考捷报这里都有 今天凌晨3时 2019年山西高考成绩查分通道开启 2019年山西高考分数线公布! 文史类 第一批为 542分 第二批为 481分 理工类 第 ...
- 一中OJ #1438 航线设计 | LIS 序列DP | 解题报告
一中OJ | #1438 航线设计 时限 1000MS/Case 内存 64MB/Case 题目描述 有一个国家被一条河划分为南北两部分,在南岸和北岸总共有N对城镇,每一城镇在对岸都有唯一的友好城镇. ...
- 一中OJ #3509 七的倍数 [USACO Jan16,洛谷P3131] | 同余前缀和 | 解题报告
一中OJ | #3509 七的倍数 [USACO Jan16 Silver , Subsequences Summing to Sevens] 时限 1000MS/Case 内存 128MB/Case ...
- 一中OJ #1151 [USACO Jan08] 化妆晚会 | 排序与查找 | 解题报告
一中OJ | #1151 化妆晚会 时限 1000MS/Case 内存 64MB/Case 题目描述 万圣节又到了!FJ打算带他的奶牛去参加一个化装晚会,但是FJ只做了一套能容下两头总长不超过 S 的 ...
- 2019晋城一中开放日
总算到开放日了啊 一直很期待呢 早上打完针以后就直接去了晋一 (参观的人好多啊) 到了编程社以后,我以为今年的帮忙是要打气球之类的. 然而... 然而zym大佬给了我一沓明信片. 然后我就弱小可怜又无 ...
- 2021年晋城二中高考成绩查询,太骄傲 | 晋城八大高中高考成绩全记录!请为晋城学子点赞!...
原标题:太骄傲 | 晋城八大高中高考成绩全记录!请为晋城学子点赞! 6月24日零点, 山西高考分数可查询! 晋城八大高中都发了喜报, 一起看下吧! 晋城一中 晋城一中2018年高考高分段统计 晋城二中 ...
- 2021阳城一中高考成绩查询,阳城一中高考北大清华录取名单曝光,原来是这些人!...
原标题:阳城一中高考北大清华录取名单曝光,原来是这些人! 2017年高考,清华北大在山西录取工作圆满结束.据了解,山西省清北录取20人以上的高中有2所,5-8人的有3所,录取4人的学校有4所,录取3人 ...
最新文章
- php 小数末尾进1,PHP处理浮点数进一、去尾(不进行四舍五入) | 剑花烟雨江南...
- 没有对“C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files”的写访问权限...
- python去除中文停用词_删除停止词Python
- vscode运行conda出现 “无法加载文件C:\Users\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本” 的错误
- linux下模仿用户左键,linux 鼠标左右键互换实现代码
- 怎样推断两个日期在一周内
- 95-070-040-源码-源码调试-FLINK源代码调试方式
- java中jsp时间插件_日期插件 - WEB源码|JSP源码/Java|源代码 - 源码中国
- Java咖啡馆(8)——大话面向对象(下)
- Luogu3431 [POI2005]AUT-The Bus
- 樽海鞘群算法原理详解
- 原子结构示意图全部_所有原子结构示意图 (1)
- linux下添加三菱触摸屏usb驱动,[转载]三菱触摸屏GT Works3和PLC GX Works2编程软件下载...
- 文章最重要的并不是原创,而是伪原创
- 都市美女们的日常穿搭,女孩子春天这样穿才最时髦
- 安卓系统怎么连接服务器数据库,安卓服务器连接数据库的方法
- labview如何加载库_LabVIEW如何方便地调用DLL文件
- (PTA)数据结构(作业)11、树和图
- 赠书赠券:《大话计算机》
- 美团饿了么外卖返利小程序公众号搭建外卖返利分销系统代cps源码