Discription

In this problem you have to build tournament graph, consisting of n vertices, such, that for any oriented pair of vertices (v, u) (v ≠ u) there exists a path from vertexv to vertex u consisting of no more then two edges.

A directed graph without self-loops is a tournament, if there is exactly one edge between any two distinct vertices (in one out of two possible directions).

Input

The first line contains an integer n (3 ≤ n ≤ 1000), the number of the graph's vertices.

Output

Print -1 if there is no graph, satisfying the described conditions.

Otherwise, print n lines with n integers in each. The numbers should be separated with spaces. That is adjacency matrix a of the found tournament. Consider the graph vertices to be numbered with integers from 1 to n. Then av, u = 0, if there is no edge from v to u, and av, u = 1 if there is one.

As the output graph has to be a tournament, following equalities must be satisfied:

  • av, u + au, v = 1 for each v, u (1 ≤ v, u ≤ nv ≠ u);
  • av, v = 0 for each v (1 ≤ v ≤ n).

Example

Input
3
Output
0 1 0
0 0 1
1 0 0
Input
4
Output
-1

构造题,比较迷。
首先我们如果有了n个点的合法图是很容易构造出n+2个点的合法图的。
首先可以把1的入点看成一类点,1的出点看成一类点,然后再加上1本身和n+1和n+2,我们现在就有了5个点。
而我们的目的是让任意一对点都在至少一个三元环 (形如a->b,b->c,c->a) 出现。
所以直接xjb构造就行了,这个其实可以不用手算,直接写个程序跑一跑也是可以的2333(我是不会告诉你们我的连边方案就是电脑枚举出来的哈哈) 但是发现4没有答案,导致我一开始以为偶数都是gg的然后就WA了。。。
后来写了个搜索发现6是有答案的2333,所以是偶数的话特判完了之后直接从6的图往后跑就行了,n=6的图可以搜索也可以手玩(反正写搜索就当练暴力了2333)
#include<bits/stdc++.h>
#define ll long long
#define maxn 1005
using namespace std;
int a[maxn][maxn];
int n,m,k,tone[maxn];
int main(){
scanf("%d",&n);
if(!(n&1)){
if(n<6){
puts("-1");
return 0;
} a[1][5]=a[1][6]=1;
a[2][1]=a[2][6]=1;
a[3][1]=a[3][2]=a[3][5]=1;
a[4][1]=a[4][2]=a[4][3]=1;
a[5][2]=a[5][4]=1;
a[6][3]=a[6][4]=a[6][5]=1; tone[2]=tone[3]=tone[4]=1; for(int i=7;i<=n;i+=2){
tone[i]=1;
a[i][1]=1,a[1][i+1]=1,a[i+1][i]=1;
for(int j=2;j<i;j++){
if(tone[j]) a[j][i]=1,a[i+1][j]=1;
else a[j][i+1]=1,a[i][j]=1;
}
}
}
else{
a[1][2]=a[2][3]=a[3][1]=1;
tone[3]=1;
for(int i=4;i<=n;i+=2){
tone[i]=1;
a[i][1]=1,a[1][i+1]=1,a[i+1][i]=1;
for(int j=2;j<i;j++){
if(tone[j]) a[j][i]=1,a[i+1][j]=1;
else a[j][i+1]=1,a[i][j]=1;
}
}
} for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++) printf("%d ",a[i][j]);
puts("");
} /*
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) a[i][j]=(a[i][j]?1:1<<30);
for(int i=1;i<=n;i++) a[i][i]=0; for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) if(a[i][k]+a[k][j]<a[i][j]) a[i][j]=a[i][k]+a[k][j]; for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) if(a[i][j]>2) puts("No");
*/ return 0;
}

  

 

Codeforces 323 B Tournament-graph的更多相关文章

  1. Codeforces 459E Pashmak and Graph(dp+贪婪)

    题目链接:Codeforces 459E Pashmak and Graph 题目大意:给定一张有向图,每条边有它的权值,要求选定一条路线,保证所经过的边权值严格递增,输出最长路径. 解题思路:将边依 ...

  2. ACM - 最短路 - CodeForces 295B Greg and Graph

    CodeForces 295B Greg and Graph 题解 \(Floyd\) 算法是一种基于动态规划的算法,以此题为例介绍最短路算法中的 \(Floyd\) 算法. 我们考虑给定一个图,要找 ...

  3. codeforces gym100801 Problem G. Graph

    传送门:https://codeforces.com/gym/100801 题意: 给你一个DAG图,你最多可以进行k次操作,每次操作可以连一条有向边,问你经过连边操作后最小拓扑序的最大值是多少 题解 ...

  4. codeforces 21D:Traveling Graph

    Description You are given undirected weighted graph. Find the length of the shortest cycle which sta ...

  5. Codeforces 459E Pashmak and Graph

    http://www.codeforces.com/problemset/problem/459/E 题意: 给出n个点,m条边的有向图,每个边有边权,求一条最长的边权上升的路径的长度. 思路:用f存 ...

  6. Codeforces 466 E. Information Graph

    并查集.... E. Information Graph time limit per test 1 second memory limit per test 512 megabytes input ...

  7. codeforces 340D Bubble Sort Graph(dp,LIS)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud  Bubble Sort Graph Iahub recently has lea ...

  8. 那些年我们写过的三重循环----CodeForces 295B Greg and Graph 重温Floyd算法

    Greg and Graph time limit per test 3 seconds memory limit per test 256 megabytes input standard inpu ...

  9. codeforces 1082G - Petya and Graph 最大权闭合子图 网络流

    题意: 让你选一些边,选边的前提是端点都被选了,求所有的边集中,边权和-点权和最大的一个. 题解: 对于每个边建一个点,然后就是裸的最大权闭合子图, 结果比赛的时候我的板子太丑,一直T,(不会当前弧优 ...

随机推荐

  1. 数学基础:HUD1124-Factorial(N!末尾0的个数)

    Factorial Problem Description The most important part of a GSM network is so called Base Transceiver ...

  2. Down the Pyramid

    Do you like number pyramids? Given a number sequence that represents the base, you are usually suppo ...

  3. BZOJ 5299: [Cqoi2018]解锁屏幕

    状压DP #include<cstdio> using namespace std; const int mod=1e8+7; int F[1000005][25],dis[25][25] ...

  4. POJ-3278 广度优先搜索入门

    #include<stdio.h> #include<stdlib.h> struct node{ int x; int s; }s[]; int main(){ ]={}; ...

  5. 反转单词顺序 VS 左旋转字符串

    题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标垫符号和普通字母一样处理.例如输入字符串“I am a student.”,则输出“student. a am I ...

  6. 04_ThreadLocal整合事务操作

    文章导读: 本文主要讲解了如何在没有框架情况下如何解决Dao的事务问题, 重点理解Connection存放到WeakReference中为什么垃圾回收的时候Connection不回收 视频与源码下载: ...

  7. Policy-Based Reinforcement Learning

    Policy-based Approach policy-based 强化学习通常是要学习一个actor, actor可以用\(\pi_\theta (S)\) 来确定.如果我们用actor来玩游戏, ...

  8. 爬虫Scrapy框架-1

    Scrapy 第一步:安装 linux: pip3 install scrapy windows: 1:pip3 install wheel ,安装wheel模块 2.下载twisted:http:/ ...

  9. [Offer收割]编程练习赛48

    题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...

  10. ubuntu检测到系统错误解决方法

    解决方案: 1.打开终端,输入 sudo gedit /etc/default/apport 2.把里面的enabled=1改成enabled=0,保存