Codeforces 323 B Tournament-graph
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 ≤ n; v ≠ u);
- av, v = 0 for each v (1 ≤ v ≤ n).
Example
3
0 1 0
0 0 1
1 0 0
4
-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的更多相关文章
- Codeforces 459E Pashmak and Graph(dp+贪婪)
题目链接:Codeforces 459E Pashmak and Graph 题目大意:给定一张有向图,每条边有它的权值,要求选定一条路线,保证所经过的边权值严格递增,输出最长路径. 解题思路:将边依 ...
- ACM - 最短路 - CodeForces 295B Greg and Graph
CodeForces 295B Greg and Graph 题解 \(Floyd\) 算法是一种基于动态规划的算法,以此题为例介绍最短路算法中的 \(Floyd\) 算法. 我们考虑给定一个图,要找 ...
- codeforces gym100801 Problem G. Graph
传送门:https://codeforces.com/gym/100801 题意: 给你一个DAG图,你最多可以进行k次操作,每次操作可以连一条有向边,问你经过连边操作后最小拓扑序的最大值是多少 题解 ...
- codeforces 21D:Traveling Graph
Description You are given undirected weighted graph. Find the length of the shortest cycle which sta ...
- Codeforces 459E Pashmak and Graph
http://www.codeforces.com/problemset/problem/459/E 题意: 给出n个点,m条边的有向图,每个边有边权,求一条最长的边权上升的路径的长度. 思路:用f存 ...
- Codeforces 466 E. Information Graph
并查集.... E. Information Graph time limit per test 1 second memory limit per test 512 megabytes input ...
- codeforces 340D Bubble Sort Graph(dp,LIS)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Bubble Sort Graph Iahub recently has lea ...
- 那些年我们写过的三重循环----CodeForces 295B Greg and Graph 重温Floyd算法
Greg and Graph time limit per test 3 seconds memory limit per test 256 megabytes input standard inpu ...
- codeforces 1082G - Petya and Graph 最大权闭合子图 网络流
题意: 让你选一些边,选边的前提是端点都被选了,求所有的边集中,边权和-点权和最大的一个. 题解: 对于每个边建一个点,然后就是裸的最大权闭合子图, 结果比赛的时候我的板子太丑,一直T,(不会当前弧优 ...
随机推荐
- Html5_css
CSS 在标签上设置style属性: background-color: #2459a2; height: 48px; ... 编写css样式: 1. 标签的style属性 2. 写在head里面 s ...
- UVa 11795 状压DP Mega Man's Mission
kill[S]表示消灭机器人的集合为S,剩下的所能杀死的机器人集合. 设d(S)表示杀死机器人集合为S的方法数,答案为d((1<<n) - 1). d(S)可以由d(S')转移过来,其中S ...
- Python 前端的第三方库
sweetalert sweeralert:地址 这个使用很简单,需要在在他们的,css和js文件. 酷炫的结果 datatables datatables:地址 已https://datata ...
- Selenium WebDriver的多浏览器测试
1. IE浏览器,需要配合下载IEDriverSever.exe的驱动程序,目前selenium支持IE9以上. (驱动程序下载链接:https://pan.baidu.com/s/1YpaUsIs1 ...
- 零基础学 HTML5+CSS3 全彩版 明日科技 编著
第1章 基础知识 1.1 HTML概述 1.1.1 什么是HTML 1.1.2 HTML的发展历程 1.2 HTML文件的基本结构 1.2.1 HTML的基本结构 1.2.2 HTML的基本标记 1. ...
- seleniumIDE使用
1.selenium IDE使用:适用于火狐浏览器 2.界面按钮包括录制(右上角的红点),运行脚本(中上页的绿色三角,包括依次运行和单个运行的2个运行按钮) 3.导出文件为.java,在文件选项中
- Python包和日志模块
1.什么是包 包是模块的一种形式,包的本质就是一个含有__init__.py文件的文件夹 2.为什么要有包 提高开发人员维护性 3.如何用包 导入包就是在导包下的__init__.py ...
- [adb 学习篇] adb pull
adb pull E:\uitest\testcase\CaseDemo\testcase\3dmark\3DMarkAndroid /sdcard/3DMarkAndroid 假设: E: ...
- Android金额输入EditText共通方法
代码改变世界 EditText输入框实现最多到小数点后两位(金额显示) package com.lianpos.util; import android.text.Editable; import a ...
- HDU——1042N!(大数阶乘乘法)
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Subm ...