hdu5302 构造
题意:给你一个无向图,它的边要么是黑色要么是白色,且图上的每个点最多与两个黑边两个白边相连。现在,Demon将图分成两部分,一部分包含所有的黑边,另一部分包括所有的白边,给你白边图中度为0的点的数量w0,度为1的点数w1,度为2的点数w2,与黑边图中度为0的点数b1,度为1的点数b1,度为2的点数b2,要你输出任意一个符合条件的原图,如果不能,输出-1
无论是黑边图,还是白边图,给出的度为0、1、2三种点的数量均>=1 w0+w1+w2==b0+b1+b2,输出图的点数最多为w0+w1+w2个;图中无重边,无自环;
因为 只要白边或者 黑边 度数为1的点 为奇数个 就一定是无解的,因为每个点的白度数和黑度数至多为2,
那么最小是3个点 无解 4点的话 只剩 1 2 1 1 2 1 特判
接下来的 就构造
处理白色的时候 1 2 3 4 5..n 前w2 个分别连接,然后 接下来 从(w2,w2+1)(w2+2,w2+3)...(w2+w1-2,w2+w1-1) 然后再让最大的那个奇数和1相连,为何等等解释
处理黑色的时候1 3 5...2 4 6.... 依照上面的方法连接, 但是最后一条 就是选择 最后一个数和1相连,这样一定是一组解,因为我们排完相邻的不会有在之前相交(n>=5) 那么最大的偶数也不会和1相交,于是就得到解了
解释上面为何使用最大的奇数,就是为了让2和最大的奇数他们放在中间,尽量早的使用,在处理黑色的时候就不会产生无解了,因为最少有一个是没有黑色边度数的,最后一个和1连的 取最后一个便是,因为n>=5最后一个一定是大偶数也不会是2 那么就一定存在一组解
#include <iostream>
#include <algorithm> #include <cstdio>
using namespace std;
const int maxn=*;
int a[maxn];
int main()
{
int w0,w1,w2,b1,b0,b2;
int cas;
scanf("%d",&cas);
for(int cc=; cc<=cas; cc++)
{
scanf("%d%d%d%d%d%d",&w0,&w1,&w2,&b0,&b1,&b2);
if(w0==||w1==||w2==||b0==||b1==||b2==)while(true);
if(w1&||b1&){
puts("-1");continue;
}
int n=w0+w1+w2;
if(n==){
puts("");
puts("1 2 0");
puts("1 3 0");
puts("4 2 1");
puts("4 3 1");
continue;
}
printf("%d\n",(w1+w2*+b1+b2*)/ );
for(int i=;i<w2; i++)
printf("%d %d 0\n",i,i+);
for(int i=;i<w1-;i+=){
printf("%d %d 0\n",w2+i,w2+i+);
}
int id=(n-)/*+;
printf("%d %d 0\n",,id);
int cnt=;
for(int i=;i<=n; i+=){
a[cnt++]=i;
}
for(int i=;i<=n; i+=){
a[cnt++]=i;
}
for(int i=;i<b2-; i++)
printf("%d %d 1\n",a[i],a[i+]);
int d=;
for(int i=; i<b1-; i+=){
printf("%d %d 1\n",a[b2-+i],a[b2+i]);
d=max(d,b2+i);
}
for(int i=d+; ; i++)
if(a[i]!=id&&a[i]!=){
printf("%d %d 1\n",,a[i]);break;
}
}
return ;
}
hdu5302 构造的更多相关文章
- 2015 多校联赛 ——HDU5302(构造)
Connect the Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- [2015hdu多校联赛补题]hdu5302 Connect the Graph
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5302 题意:给你一个无向图,它的边要么是黑色要么是白色,且图上的每个点最多与两个黑边两个白边相连.现在 ...
- 学习笔记:Maven构造版本号的方法解决浏览器缓存问题
需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...
- 一步步构造自己的vue2.0+webpack环境
前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...
- About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷
构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...
- Eos开发——构造查询条件
1.ajax 方式 var data = { orgid :orgid,year:year ,month: month,type:type,sortField:'sellEmpname' ,sortO ...
- 【C++】类和对象(构造与析构)
类 类是一种抽象和封装机制,描述一组具有相同属性和行为的对象,是代码复用的基本单位. 类成员的访问权限 面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限.类成员有3种访问权限: ...
- Spring 设值注入 构造注入 p命名空间注入
注入Bean属性---构造注入配置方案 在Spring配置文件中通过<constructor-arg>元素为构造方法传参 注意: 1.一个<constructor-arg>元素 ...
- 并发包的线程池第二篇--Executors的构造
上一篇讲述了ThreadPoolExecutor的执行过程,我们也能看出来一个很明显的问题:这个线程池的构造函数比较复杂,对于不十分理解其运作原理的程序员,自己构造它可能体现和想象中不一样的行为.比如 ...
随机推荐
- 打开对话框opendialog
//使用:OpenDialog控件. ldg.Options := ldg.Options + [ofAllowMultiSelect]; ldg.Filter := '作答文件ZF包.zf| ...
- 命令行颜色换算器(基于python)
import sys print(hex(int(sys.argv[1])<<16|int(sys.argv[2])<<8|int(sys.argv[3]))) 就两行代码 在 ...
- SpringBoot-整合@transactional注解
springboot默认集成事务,只主要在方法上加上@Transactional即可
- 如何在js中将统计代码图标隐藏
建站时我们都会加一下网站统计,方便把控内容的内容的运营.大部分站长安装的站点统计是第三方统计代码,js形式的,很少用以服务器日志为基础分析的统计.(当然能通过网站日志来分析网站的运营者比一般的站长水平 ...
- MySQL准入规范及容量评估
一.数据库设计 1.表结构设计 -表中的自增列(auto_increment属性)推荐使用bigint类型 -首选使用非空的唯一键, 其次选择自增列或发号器 不使用更新频繁的列,尽量不选择字符串列,不 ...
- 【NMS与IOU代码】
# -*- coding: utf-8 -*- import numpy as np def IOU1(A,B): #左上右下坐标(x1,y1,x2,y2) w=max(0,min(A[2],B[2] ...
- Z字形扫描
#include<cstdio> #include<iostream> #include<algorithm> #include<vector> #in ...
- 两种ps切图方法(图层/切片)
两种Ps切图方法 一. 基础操作: a) Ctrl++ 放大图片,ctrl - -缩小图片 b) 按住空格键space+,点击鼠标左键,拖动图片. c) 修改单位,点击编辑 ...
- C语言strcasecmp()函数:判断字符串是否相等(忽略大小写)
头文件:#include <string.h> 定义函数:int strcasecmp (const char *s1, const char *s2); 函数说明:strcasecmp( ...
- 使用VS2013自带的PreEmptive Dotfuscator and Analytis来混淆C#代码
1. 使用VS2013编译你要打包的程序,会在文件夹中的 ..\bin\Release中 2. 点击VS2013中的TOOLS -> PreEmptive Dotfuscator and Ana ...