【集训Day1 测试】装饰
装饰(decorate)
【题目描述】
一个图有 N 个结点,编号 1 至 N,有 M 条无向边,第 i 条边连接的两个结点是 Ai 和Bi,其中 Ai 和 Bi 是不同的结点。可能有多条边连接的是同一个点对。现在要给每个结点做标致,每个结点的标志要么是‘F’,要么是‘J’。如果结点 A 和结点 B 之间有边,那么结点 A 和结点 B 的标志就必须不同。做一个‘F’的费用比做一个‘J’的费用要高。所以现在希望用尽量多的‘J’标志要完成任务。输出最多可以用多少‘J’去完成任务。如果不可能完成任务,输出-1。
【输入格式】decorate.in
第一个整数 N 和 M。1 <= N <= 50000,1 <= M <= 100000。
接下来有 M 行,每行两个整数 Ai 和 Bi。
【输出格式】decorate.out
一个整数。
【输入样例】
4 4
12
23
34
41
【输出样例】
2
【解题思路】
利用vector动态数组模拟邻接链表,使a[i][j]表示与i点有连线的所有点。利用深度优先搜索遍历整个图,当前节点标记为f,下一个节点就标记为j,如果说下一个节点在之前已经访问过了,如果说与当前节点的标记相同意味着不可能完成任务,直接break掉并输出-1即可。如果遍历完了之后发现f比j多那么把f和j调换即可。
【参考程序】
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
vector<int> pic[50001];
bool b[50001],brek;
int c[50001],f,j,n,m,ans,a,d;
void dfs(int point,int fj)
{
b[point]=true;//标记当前节点已被访问
c[point]=fj;//对当前节点进行标记
if (fj==0) f++;//0表示标记f,1表示标记j
else j++;
for (int i=0;i<pic[point].size();i++)//查看所有与当前节点有连线的点
{
if (!b[pic[point][i]]) dfs(pic[point][i],1-fj);//未被访问就标记并继续遍历
else if (c[pic[point][i]]==fj) //发生冲突
{
brek=true;
return ;
}
}
}
int main()
{
freopen("decorate.in","r",stdin);
freopen("decorate.out","w",stdout);
cin>>n>>m;
for (int i=1;i<=m;i++)
{
cin>>a>>d;
pic[a].push_back(d);
pic[d].push_back(a);
//压入,由于是无向图,所以边的两个端点都要压入。
}
for (int i=1;i<=n;i++)
{
f=j=0;//初始化
if (!b[i]) dfs(i,0);//遍历当前节点可以到达的所有节点。
ans+=max(f,j);
if (brek==true)//如果是冲突break出来的,那么输出-1.
{
cout<<-1;
return 0;
}
}
cout<<ans;
return 0;
}
【集训Day1 测试】装饰的更多相关文章
- 【集训Day1 测试】选择课题
选择课题(bestproject) [问题描述] Robin 要在下个月交给老师 n 篇论文,论文的内容可以从 m 个课题中选择.由于课题数有限,Robin 不得不重复选择一些课题.完成不同课题的论文 ...
- 【集训Day1 测试】【USACO】照相
照相(fairphoto) [题目描述] 有N 头奶牛站在一条数轴上,第 i 头奶牛的位置是 Pi,奶牛不会重叠站在同一个位置, 第i 头奶牛的颜色是 Ci,其中 Ci 要么是字符'G'要么是字符'H ...
- 【集训Day1 测试】奇怪数
奇怪数(odometer) [题目描述] 一个正整数Z是奇怪数,当且仅当满足的条件是:Z的所有数字中,只有一个数字不同于其他数字.例如:33323.110 都是奇怪数,而 9779.5555 都不是奇 ...
- 中山纪中集训Day1测试(摸鱼)
AT3 粉刷匠 Description 赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= = 现在,神庙里有N根排列成一直线的石柱,从1到N标号,长老要求用油漆将这些石柱重新粉刷一遍.赫克托有K桶颜色各不 ...
- JAVA测试装饰者模式
package shb.java.demo; /** * 测试装饰者模式 * @package :shb.java.demoJava02 * @author shaobn * @Describe : ...
- 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1
目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...
- 国庆集训 Day1 T2 生成图 DP
国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...
- 2019暑期金华集训 Day1 组合计数
自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...
- 2019暑期金华集训 Day1 数据结构
自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...
随机推荐
- MySQL 字段值为NULL,PHP用json转换,传给js,显示null
这个问题出在php的json_encode环节,这个函数返回的json数据中会把空值写作null. 想通过在js端这样把null转为空字符串是不可以的: JSON.parse(JSON.stringi ...
- Unity中的优化技术
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/candycat1992/article/ ...
- 【IntelliJ IDEA】Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA 解决办法
笔者打开IntelliJ IDEA敲代码的时候遇到了如下问题: IDEA Event Log窗口提示 Unable to save settings: Failed to save settings. ...
- 27 个问题突破所有重难点,BroadcastReceiver 、ContentProvider 知多少?「建议收藏」
前言 距离上次更新过去一周多了,打破了之前两到三天一更的惯例,主要还是这部分内容太多了. 原先想把 BroadcastReceiver .ContentProvider 分两篇来总结,但的确,这两大组 ...
- 泛微ecology OA系统某接口存在数据库配置信息泄露漏洞
2漏洞详情 攻击者可通过该漏洞页面直接获取到数据库配置信息,攻击者可通过访问存在漏洞的页面并解密从而获取数据库配置信息,如攻击者可直接访问数据库,则可直接获取用户数据,由于泛微e-cology默认数据 ...
- 爬虫之scrapy简介
原始的爬虫流程:效率低.同步.阻塞 scrapy执行流程:效率高.异步.非阻塞 scrapy的概念 scrapy是一个爬虫框架 开发速度快 稳定性高 性能优越 scrapy的流程 1. 爬虫模块(Sp ...
- nginx篇最初级用法之三种虚拟主机基于域名\基于端口\基于IP地址端口的虚拟主机
在nginx中虚拟主机的类型与apache一样也有三种 1.基于域名的虚拟主机 2.基于端口的虚拟主机 3.基于IP地址端口的虚拟主机 在nginx配置文件中每一个server为一个虚拟主机如果需要多 ...
- [BZOJ4310] 跳蚤 SAM || SA
没有代码的. 传送门 先二分出第 \(mid\) 大的字串 \(s\),然后从后往前切割,每次大于 \(s\) 了就不行. 涉及到的操作:求第 \(mid\) 大子串:比较两个字串(求 \(lcp\) ...
- 20190820 Tue 集训总结&NOIP模拟 27
低谷度过了? 但是skyh阿卡了,还是反衬出我的辣鸡. T1知道要sort,却忘了判重,正解不如暴力分高,555. T2成功化出正解柿子,然后化过头了,化出了无法DP的柿子. 果然不够强,大神们一眼就 ...
- 1. 彤哥说netty系列之开篇(有个问卷调查)
你好,我是彤哥,本篇是netty系列的第一篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 本文主要讲述netty系列的整体规划,并调查一下大家喜欢的学习方式. 知识点 ne ...