zoukankan      html  css  js  c++  java
  • 「CTSC2016」单调上升路径

    「CTSC2016」单调上升路径

    解题思路:根据提示可以得到答案的下界是 (n - 1) ,然后打表发现这个下界好像一定可以取到.

    事实上考虑 (n) 个点完全图的边数是 (frac{n(n-1)}{2}), 如果 (n) 是偶数,那么可以把边成 (n-1) 组,每一组 (frac{n}{2}) 条边,并且每组的边都不在端点相交,如果从小到大安排上边权,显然每一组只能走一条边,答案是 (n-1)

    构造不在端点相交可以单独拿出一个点 (x) 放在中间,其他点围成一圈,每次拿 (x) 和一个其它点连边,剩下的点就可以一一对应过去,这样就能构造出来了.

    /*program by mangoyang*/
    #include <bits/stdc++.h>
    #define inf (0x7f7f7f7f)
    #define Max(a, b) ((a) > (b) ? (a) : (b))
    #define Min(a, b) ((a) < (b) ? (a) : (b))
    typedef long long ll;
    using namespace std;
    template <class T>
    inline void read(T &x){
    	int ch = 0, f = 0; x = 0;
    	for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = 1;
    	for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - 48;
    	if(f) x = -x;
    }
    int s[505][505], cnt, n;
    int main(){
    	read(n);
    	for(int i = 1, x, y; i < n; i++){
    		s[i][n] = ++cnt, x = i, y = i;
    		for(int j = 1; j <= (n - 1) / 2; j++){
    			x = x == 1 ? n - 1 : x - 1;
    			y = y == n - 1 ? 1 : y + 1;
    			s[Min(x, y)][Max(x, y)] = ++cnt;
    		}
    	}
    	for(int i = 1; i <= n; i++)
    		for(int j = i + 1; j <= n; j++) printf("%d ", s[i][j]);
    }
    
  • 相关阅读:
    go学习中的零散笔记
    git reset --hard与git reset --soft的区别
    php必学必会
    gdb 解core
    php学习
    高仿京东到家APP引导页炫酷动画效果
    RxHttp
    SVN回滚文件
    遍历枚举
    python3 多线程
  • 原文地址:https://www.cnblogs.com/mangoyang/p/10416308.html
Copyright © 2011-2022 走看看