Place the Guards
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2021
题解:二分图判断
/*
*@Author: STZG
*@Language: C++
*/
#include <bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<deque>
#include<stack>
#include<cmath>
#include<list>
#include<map>
#include<set>
//#define DEBUG
#define RI register int
#define endl "\n"
using namespace std;
typedef long long ll;
//typedef __int128 lll;
const int N=100000+10;
const int M=100000+10;
const int MOD=1e9+7;
const double PI = acos(-1.0);
const double EXP = 1E-8;
const int INF = 0x3f3f3f3f;
int t,n,m,k,p,l,r,u,v;
int ans,cnt[2],flag,temp,sum;
int col[N];
char str;
struct node{};
vector<int>G[N];
bool dfs(int u,int color){col[u]=color;cnt[color]++;for(int i=0,j=G[u].size();i<j;i++){int v=G[u][i];if(col[u]==col[v])return 0;if(col[v]==-1&&!dfs(v,!color))return 0;}return 1;
}
void init(){for(int i=0;i<n;i++){G[i].clear();}memset(col,-1,sizeof(col));ans=1;sum=0;
}
int main()
{
#ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout);
#endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);init();for(int i=1;i<=m;i++){scanf("%d%d",&u,&v);G[u].push_back(v);G[v].push_back(u);}for(int i=0;i<n;i++){if(col[i]==-1){memset(cnt,0,sizeof(cnt));ans&=dfs(i,1);if(ans){if(cnt[0]+cnt[1]==1){sum++;}else{sum+=min(cnt[0],cnt[1]);}}}}if(ans){cout<<sum<<endl;}else{cout<<-1<<endl;}}#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC);
#endif//cout << "Hello world!" << endl;return 0;
}
Place the Guards相关推荐
- less新手入门(四)—— Mixin Guards
八.Mixin Guards 有条件的 mixin 当您想要匹配表达式时,相对于简单的值或特性,Guards是有用的.如果您熟悉函数式编程,您可能已经遇到过它们. 为了尽可能地保持CSS的声明性质,在 ...
- SAP 电商云 Spartacus UI Checkout 页面的三个 page guards
点击 Proceed To 按钮之后,触发 CmsGuardsService 的 cmsPageCanActivate 方法: 依次调用每个 page guard: if (guards.length ...
- Less的条件表达式Guards
当需要根据表达式,而不是参数的值或数量进行匹配时,条件表达式(Guards)就显得非常有用.如果你熟悉函数式编程的话,对条件表达式也不会陌生. 为了尽可能地接近CSS的语言结构,Less使用关键字 w ...
- 长城守卫 Beijing guards CERC 2004 LA3177 解题总结
长城守卫 Beijing guards CERC 2004 LA3177 解题总结 在最小值,最大值的问题 或者没有办法确定答案时候, 可以使用二分答案法. #include <cstdio& ...
- UVA1335-Beijin Guards(二分)
Beijin Guards 题意:有n个守卫围成一个圈,第 i 个守卫想要 a [ i ] 件礼物,要求每个相邻的守卫礼物不重复,求最少需要多少种礼物. n 为偶数时,答案即为 ,. n 为奇数的 ...
- LA3177 - Beijing Guards(二分+贪心【更优美的解法)
简介:同皇帝的烦恼 分析: 如果n是偶数,那么答案就是相邻两个人的r值之和的最大值 即ans=max{r(i)+r(i+1)} (i=1,2,3,-,n),规定r(n+1)=r1 这时的ans实际上是 ...
- UVa1335 Beijing Guards(二分查找)
问题:有n个守卫,构成一个环,分别要求获得ri个礼物,问最少需要准备多少个礼物,使得相邻的两个人礼物各不相同 思路: 假设礼物个数为 p n为偶数情况时,相邻两个要求礼物的和的最大值满足条件 n为奇数 ...
- [UVALive 3177] Beijing Guards
图片加载可能有点慢,请跳过题面先看题解,谢谢 Uva的题目还是很好的,比如这道,是一道比较好的思维题,代码难度不大 首先处理一下偶数的情况,很简单,答案是相邻两个守卫的礼物和的最大值 这儿请 fhr ...
- 【UVA - 1335】Beijing Guards (贪心,二分)
题干: 题目大意: 有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物,则双方都会很不高兴,问最少需要多少种不同的礼物才能满 ...
最新文章
- Java新手问题 02 面向对象基本功
- Matlab:精度控制
- java8 函数式编程_您必须学习Java 8的函数式编程吗?
- ADF:动态视图对象
- 利用TCN网络实现MNIST手写体数据集的识别
- OFFICE技术讲座:边框底纹对布局的影响
- java下载zip文件
- GAN:两者分布不重合JS散度为log2的数学证明
- Cmake查找所有指定cpp文件并进行编译
- 中环混改尚存变数 高调的TCL要上演“资本魔输”?
- 名言警句(英语和汉语)
- 基于区块链的数字藏品管控方案
- NetBeans ide操作流程及注意事项
- 针对商品标题冗长问题,阿里工程师怎么解决?
- 使用树莓派进行pH测定
- QTableWidget表格控件的用法
- 海量数据处理的 Top K算法(问题) 小顶堆实现
- 测试工程师具备的基本素质
- WSL(ubuntu) 和Cisco Anyconnect存在的网络连接异常问题
- 模电学习02:晶体三极管
热门文章
- android xml 未能解析文件,Android Studio提示“无法解析符号”,但项目已编译
- javascript 判断为负数_JavaScript从零开始——标准库(7)
- java media_unmount file_(20120801)android文件的读写SD卡总结
- c语言中的数字菱形,打印数字菱形,急啊,帮帮小女子啊。。。
- Mysql -uroot -p 登陆不上_MySQL命令行登陆,远程登陆MySQL 的方法
- 七十四、完成Vue项目城市详细页,并实现打包
- 四十、Vue项目上手 | 用户管理系统 实现弹窗,搜索和详细页功能(下篇)
- 期末考试前的预习,科目:化工设备与反应器(6)
- 我是Python小玩家,一行代码能做哪些炫酷的事情 (三十一)
- 化工设备与反应器 第三章 直梁的弯曲