[codeforces850D]Tournament Construction

news/2025/3/21 18:34:08/

题目大意

给定m个数的一个非负整数集合,不超过30。你需要构造一个竞赛图,满足:所有点的出度去重后等于该集合。
m≤31

分析

做这题我用到了兰道定理(Landau’s Theorem)。
设点i的出度为d[i],那么对于任意 1in ,有 ij=1d[i]i(i1)2 。且当i=n时是等于。
那么可以考虑构造一个合法的d[]数组。每个数至少用一次,那么可以做一次背包。然后枚举点的个数,判断是否存在即可。
得到出度数组d[]后,依然是利用兰道定理来构造出竞赛图。主要思路如下:
1. 对于i>j,i向j连边,得到一个最初始的竞赛图,记它的出度数组为u[]。并且给d[]升序排序
2. 找到第一个满足 d[i]>u[i] 的位置,然后找到最大的j,满足u[i]=u[j],接下来找到第一个满足 d[k]<u[k] 的位置,有 j<k u[j]+2u[k] ,那么必然存在点x满足k向x连边且x向j连边。把这两条边翻转即可
3. 重复上面的过程直到d[]与u[]完全相同
关于兰道定理的具体内容可以上网搜

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;const int N=62,M=1832;typedef long long LL;int n,m,a[N],f[N][N][M],g[N][N][M],d[N],u[N];bool G[N][N];int main()
{scanf("%d",&m);for (int i=1;i<=m;i++) scanf("%d",&a[i]);sort(a+1,a+m+1);f[0][0][0]=1;for (int i=1;i<=m;i++)for (int j=i;j<N;j++)for (int k=i-1;k<j;k++)for (int y=k*(k-1)/2,x=(j-k)*a[i]+y;x<M;x++,y++) if (f[i-1][k][y]){f[i][j][x]=1; g[i][j][x]=j-k;}for (n=m;n<N && !f[m][n][n*(n-1)/2];n++);if (n==N){printf("=(\n"); return 0;}printf("%d\n",n);for (int i=m,j=n,k=n*(n-1)/2,x;i;i--){for (x=0;x<g[i][j][k];x++) d[j-x]=a[i];x=k; k-=g[i][j][x]*a[i]; j-=g[i][j][x];}sort(d+1,d+n+1);for (int i=1;i<=n;i++){u[i]=i-1; for (int j=1;j<i;j++) G[i][j]=1;}for (int i,j,k,x;;){for (i=1;i<=n && d[i]<=u[i];i++);if (i>n) break;for (j=n;u[j]!=u[i];j--);for (k=1;d[k]>=u[k];k++);for (x=n;!(G[k][x] && G[x][j]);x--);G[k][x]=0; G[x][k]=1; G[x][j]=0; G[j][x]=1; u[k]--; u[j]++;}for (int i=1;i<=n;i++){for (int j=1;j<=n;j++) putchar(G[i][j]+'0');printf("\n");}return 0;
}

http://www.ppmy.cn/news/947107.html

相关文章

快速排序 + 前k小数

先介绍快速排序&#xff1a; 找到一个中间的数字9&#xff1b; 现在做的就是使左边所有的数字不大于9&#xff0c;右边所有的数字都不小于9 1. 那么在左边找到第一个比9大的数字&#xff0c;把他取出来并放到托管所1里面&#xff08;意味着取数的地方留下了一个坑&#xff0…

【力扣 leetcode】850:矩形面积II

每日进步 集合&#xff1a; Set<Integer> set new HashSet<Integer>(); 无存放顺序&#xff0c;无重复元素。 列表&#xff1a; List<Integer> hbound new ArrayList<Integer>(set); 有存放顺序&#xff0c;有重复元素。 排序&#xff1a; Collec…

10、RH850 CAN通讯功能和配置

前言: CAN 是 Controller Area Network 的缩写&#xff08;以下称为 CAN&#xff09;&#xff0c;是 ISO国际标准化的串行通信协议。 在当前的汽车产业中&#xff0c;出于对安全性、舒适性、方便性、低公害、低成本的要求&#xff0c;各种各样的电子控制系统被开发了出来。由于…

RH850F1x Starter Kit V3用户手册(中文翻译版)

版权声明 本博文系广州欧科曼科技有限公司所有&#xff0c;转载请注明出处。 广州欧科曼科技有限公司致力于瑞萨MCU及周边相关产品开发设计。 email&#xff1a;1256153255qq.com 需要翻译版PDF文档&#xff0c;请联系博主QQ获取 website for purchase 瑞萨RH850开发板 and 瑞…

codeforces 850c sg函数

题目传送门&#xff1a;http://codeforces.com/problemset/problem/850/C 博弈题&#xff0c;题目大意是给你一些数字&#xff0c;可以有这样的操作&#xff0c;选一个质数 p 和一个正整数k&#xff0c;可以这样选的条件是存在 n ,使得pk|n&#xff0c;若这样做&#xff0c;令…

Leetcode 850. 矩形面积 II

1.题目描述 我们给出了一个&#xff08;轴对齐的&#xff09;二维矩形列表 rectangles 。 对于 rectangle[i] [x1, y1, x2, y2]&#xff0c;其中&#xff08;x1&#xff0c;y1&#xff09;是矩形 i 左下角的坐标&#xff0c;$ (x_{i1}, y_{i1})$ 是该矩形 左下角 的坐标&#…

i春秋ctf练习

CTF训练 类型&#xff1a;Misc 题目名称&#xff1a;你好&#xff0c;i春秋类型&#xff1a;Basic 题目名称&#xff1a;来看一下flag格式类型&#xff1a;Crypto 题目名称&#xff1a;Rotated!类型&#xff1a;Misc 题目名称&#xff1a;Hello World!类型&#xff1a;Misc 题目…

R包--ChAMP--甲基化芯片处理(450K、850K)

参考&#xff1a; Yuan Tian&Tiffany J Morris& Amy P Webster&Zhen Yang&Stephan Beck&Andrew Feber& Andrew E Teschendorff. The Chip Analysis Methylation Pipeline. 2021-10-26生信技能树。 850K甲基化芯片数据分析 一、450K、850K甲基化芯片覆盖…