Connect the Graph

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 456    Accepted Submission(s): 144

Special Judge

Problem Description
Once there was a special graph. This graph had
n
vertices and some edges. Each edge was either white or black. There was no edge connecting one vertex and the vertex itself. There was no two edges connecting the same pair of vertices. It is special because the each vertex is connected to at most two black
edges and at most two white edges.



One day, the demon broke this graph by copying all the vertices and in one copy of the graph, the demon only keeps all the black edges, and in the other copy of the graph, the demon keeps all the white edges. Now people only knows there are
w0
vertices which are connected with no white edges,
w1
vertices which are connected with 1
white edges, w2
vertices which are connected with 2
white edges, b0
vertices which are connected with no black edges,
b1
vertices which are connected with 1
black edges and b2
vertices which are connected with 2
black edges.



The precious graph should be fixed to guide people, so some people started to fix it. If multiple initial states satisfy the restriction described above, print any of them.
 
Input
The first line of the input is a single integer
T (T≤700),
indicating the number of testcases.



Each of the following T
lines contains w0,w1,w2,b0,b1,b2.
It is guaranteed that 1≤w0,w1,w2,b0,b1,b2≤2000
and b0+b1+b2=w0+w1+w2.




It is also guaranteed that the sum of all the numbers in the input file is less than
300000.
 
Output
For each testcase, if there is no available solution, print
−1.
Otherwise, print m
in the first line, indicating the total number of edges. Each of the next
m
lines contains three integers x,y,t,
which means there is an edge colored t
connecting vertices x
and y.
t=0
means this edge white, and t=1
means this edge is black. Please be aware that this graph has no self-loop and no multiple edges. Please make sure that
1≤x,y≤b0+b1+b2.
 
Sample Input
2
1 1 1 1 1 1
1 2 2 1 2 2
 
Sample Output
-1
6
1 5 0
4 5 0
2 4 0
1 4 1
1 3 1
2 3 1
 
Author
XJZX
 
Source
 
Recommend
wange2014   |   We have carefully selected several similar problems for you:  

pid=5395" target="_blank">5395 5394 

pid=5393" target="_blank">5393 

pid=5392" target="_blank">5392 

pid=5391" target="_blank">5391 

 

构造法:

首先保证度数之和为偶数,即w1=b1=1 ,否则无解

又w0,w1,w2,b0,b1,b2均为正数 故

当n=4时,仅仅有1种情况 1 2 1 不是无解

当n≥4时,先构造2个环分别为白环,黑环

对于奇数n:



  白环 1 2 3 ... n



  黑环 1 3 5 ... n 2 4 6 ... n-1



对于偶数n:



  白环 1 2 3 ... n



  黑环 1 3 5 ... n-1 2 n n-2 n-4 ... 4

此时,对于每一个环而言,构造答案

1-2-2-...-2-2-1
1-1 1-1 .. 1-1
1-1 0 .. 0

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXD (2000+10)
#define MAXN (6000+10)
typedef long long ll;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return (a-b+llabs(a-b)/F*F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
int a2[MAXN],a1[MAXN],n;
void calc(int *a,int n0,int n1,int n2,int p)
{
int i=1;
if (n1==0&&n2==0) return;
For(i,n2+1)
{
printf("%d %d %d\n",a[i],a[i+1],p);
}
n1-=2;
for(int i=n2+3,j=1;j<=n1;i+=2,j+=2) printf("%d %d %d\n",a[i],a[i+1],p); }
int main()
{
// freopen("C.in","r",stdin);
// freopen(".out","w",stdout); int T; cin>>T;
while(T--) {
int w0,w1,w2,b0,b1,b2;
scanf("%d%d%d%d%d%d",&w0,&w1,&w2,&b0,&b1,&b2);
n=w0+w1+w2; //特判
if ((w1&1)||(b1&1)) { printf("-1\n");continue;} int m=(w1+2*w2+b1+2*b2)/2; if (n==4)
{
puts("4\n1 2 0\n1 3 0\n2 3 1\n3 4 1");
continue;
}
else if (n>4) {
For(i,n) a1[i]=i;
if (n%2==0)
{
for(int i=1,j=1;i<=n/2;i++,j+=2) a2[i]=j;
for(int i=n/2+1,j=2;i<=n;i++,j+=2) a2[i]=j;
a2[n+1]=1;
}
else {
for(int i=1,j=1;i<=n/2+1;i++,j+=2) a2[i]=j;
a2[n/2+2]=2;
for(int i=n/2+3,j=n-1;i<=n;i++,j-=2) a2[i]=j;
a2[n+1]=1;
}
cout<<m<<endl;
calc(a1,w0,w1,w2,0);
calc(a2,b0,b1,b2,1);
} } return 0;
}

HDU 5302(Connect the Graph- 构造)的更多相关文章

  1. [2015hdu多校联赛补题]hdu5302 Connect the Graph

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5302 题意:给你一个无向图,它的边要么是黑色要么是白色,且图上的每个点最多与两个黑边两个白边相连.现在 ...

  2. HDU 6343.Problem L. Graph Theory Homework-数学 (2018 Multi-University Training Contest 4 1012)

    6343.Problem L. Graph Theory Homework 官方题解: 一篇写的很好的博客: HDU 6343 - Problem L. Graph Theory Homework - ...

  3. HDU 4725 The Shortest Path in Nya Graph [构造 + 最短路]

    HDU - 4725 The Shortest Path in Nya Graph http://acm.hdu.edu.cn/showproblem.php?pid=4725 This is a v ...

  4. HDU 5876:Sparse Graph(BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=5876 Sparse Graph Problem Description   In graph theory, t ...

  5. hdu 3371 Connect the Cities

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3371 Connect the Cities Description In 2100, since th ...

  6. HDU - 6313 Hack It(构造)

    http://acm.hdu.edu.cn/showproblem.php?pid=6313 题意 让你构造一个矩阵使得里面不存在四个顶点都为1的矩形,并且矩阵里面1的个数要>=85000 分析 ...

  7. HDU 3371 Connect the Cities(prim算法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3371 Problem Description In 2100, since the sea leve ...

  8. hdu 3371 Connect the Cities(最小生成树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3371 984ms风险飘过~~~ /************************************ ...

  9. HDU 6343 - Problem L. Graph Theory Homework - [(伪装成图论题的)简单数学题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6343 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

随机推荐

  1. 十二.GUI

    tkinter模块(tkinter是一个跨平台的PythonGUI工具包): #Tkinter是一个跨平台的Python GUI工具包 import tkinter top=tkinter.Tk() ...

  2. 【HIHOCODER 1526】 序列的值(二进制DP)

    时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个长度为 n 的序列 a[1..n],定义函数 f(b[1..m]) 的值为在 [0,m-1] 内满足如下条件的 i ...

  3. Go变量定义学习

    package main import ( "fmt" ) //变量定义: //使用var关键字或:=定义变量 //可放在函数内,或直接放在包内 //使用var()集中定义 //函 ...

  4. bzoj 3223 文艺平衡树 splay 区间翻转

    Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 17715  Solved: 7769[Submit][Status][ ...

  5. 【设计模式】GOF设计模式趣解(23种设计模式)

    创建型模式                   1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说 ...

  6. asp.net 引发类型为“System.OutOfMemoryException”的异常

    asp.net 引发类型为“System.OutOfMemoryException”的异常通常发生在IIS进程获取不到内存时. 临时解决方法是: 回收IIS的应用程序池. 如果要比较好的解决办法是: ...

  7. 《springMVC》学习笔记

    1.SpringMVC框架 1.1 MVC在b/s系统下的应用 用户发送request请求到Controller Controller请求模型(Model)进行处理 Model将处理结果返回到Cont ...

  8. final finally finalize 区别及用法

    final 1,final修饰的class,代表不可以继承扩展. 2.final的方法也是不可以重写的. 3.final修饰的变量是不可以修改的.这里所谓的不可修改对于基本类型来来,的确是不可以修改. ...

  9. Spring Boot修改Thymeleaf版本(从Thymeleaf2.0到3.0)

    Spring Boot默认选择的Thymeleaf是2.0版本的,那么如果我们就想要使用3.0版本或者说指定版本呢,那么怎么操作呢?在这里要说明下 3.0的配置在spring boot 1.4.0+才 ...

  10. 210 Course ScheduleII

    /* * 210 Course ScheduleII * 2016-6-9 by Mingyang * http://www.jyuan92.com/blog/leetcode-course-sche ...