ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

cf550 D. Regular Bridge

2022-06-06 20:35:36  阅读:178  来源: 互联网

标签:Bridge cf550 2s int 连通 Regular 相连 sim 号点


题意:

给定 \(k\),构造连通、无重边、无自环、每个点的度为 \(k\) 且含至少一个桥的无向无权图

\(1\le k \le 100\)

思路:

当 \(k\) 为偶数时无解:设 \(k=2s\),设某连通块 \(G\) 与图的其他部分通过桥 \(e\) 连接,去掉桥 \(e\),则 \(G\) 中有一个点的度为 \(2s-1\),其他点的度为 \(2s\)。则 \(G\) 中所有点的总度数为奇数,根据握手定理这是不可能的。

当 \(k\) 为奇数时一定有解。这样构造:

一共 \(2k+4\) 个点,两个连通块,每个连通块中有 \(2k+4\) 个点。

考虑第一个连通块,其中的点编号为 \(1\sim k+2\)

第一个连通块中的点分为三种:\(1\) 号点、\(2\sim k\) 号点、\(k+1\) 和 \(k+2\) 两点

\(1\) 号点与另一个连通块相连,然后与 \(2\sim k\) 号点相连;

\(k+1\) 号点与 \(2\sim k\) 号点相连,\(k+2\) 号也是。然后把 \(k+1\) 和 \(k+2\) 连起来;

\(2\sim k\) 号点两两相连,但是删除形如 “\(i -i+1\),$i $ 为偶数” 的边

int k; vector<PII> edges;
void make(int base) { // 1, 2~k, k+1,k+2
    for(int i = 2; i <= k; i++) edges.pb({1+base,i+base}),
        edges.pb({k+1+base,i+base}), edges.pb({k+2+base,i+base});
    for(int i = 2; i < k; i++)
        for(int j = i + 1; j <= k; j++)
            if(!(j - i == 1 && j % 2))
                edges.pb({i+base,j+base});
    edges.pb({k+1+base,k+2+base});
}
void sol() {
    cin >> k;
    if(k % 2 == 0) return cout << "NO", void();
    if(k == 1) return cout << "YES\n2 1\n1 2", void();
    cout << "YES\n" << 2*k+4 << ' ';
    edges.pb({1,k+3}); make(0), make(k+2);
    cout << edges.size() << endl;
    for(auto &[x,y]: edges) cout << x << ' ' << y << endl;
}

标签:Bridge,cf550,2s,int,连通,Regular,相连,sim,号点
来源: https://www.cnblogs.com/wushansinger/p/16349553.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有