zoukankan      html  css  js  c++  java
  • [bzoj5025]单调上升路径

    由于题目的证明可以发现$ans\ge 2m/n \ge n-1$,于是大胆猜测答案就是n-1
    若n是奇数,则将边分为n组,每组(n-1)/2,如果同组内边没有交点,那么只需要每一组边一个权值区间,从每一组边一定不可能走回那组边(因为会经过其他组的边),所以答案至多n-1
    若n是偶数,先对n-1的图边分类,最后可以发现每一组边都还剩下一个点,和n相连即可
    具体分组方法:如果将n个点排成一条线,初始2-n,3-(n-1)……然后不断平移+循环即可

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,k,t,a[505][505];
     4 int main(){
     5     scanf("%d",&n);
     6     k=n+(n&1)-1;
     7     for(int i=0;i<k;i++){
     8         if (n%2==0)a[i][n-1]=a[n-1][i]=++t;
     9         for(int j=1,x=i,y=i;j<(n+1)/2;j++){
    10             x=(x+1)%k;
    11             y=(y-1+k)%k;
    12             a[x][y]=a[y][x]=++t;
    13         }
    14     }
    15     for(int i=0;i<n;i++){
    16         for(int j=i+1;j<n;j++)printf("%d ",a[i][j]);
    17         printf("\n");
    18     }
    19     return 0;
    20 }
    View Code
  • 相关阅读:
    位向量法、二进制法枚举子集
    jfinal 下载文件时重命名
    Java程序员开发参考资源
    (二)Hive1.2.2
    (一)Hive1.2.2
    YARN资源调度框架
    MapReduce并行编程模型
    HDFS 分布式文件系统
    Kafka
    观察者模式
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/11312878.html
Copyright © 2011-2022 走看看