20241016下午

news/2024/10/19 3:41:16

P1040 启发式图染色问题(color)

我们可以先想一棵树的情况,如下图所示

image

但是显然这个节点数量是 \(2 ^ k\),我们可以考虑二分图,然后你推着推着就会发现一个建图方案

image

具体来说,我们可以现在左边创建一个颜色为 \(1\) 的结点,然后我们想让颜色数量尽量多,我们直接在右边创建一个颜色为 \(2\) 的结点,并让 \(1\) 连向 \(2\) ,我们又可以在左边创建一个颜色为 \(3\) 的结点, 但是以当前点的颜色数量而言的话,还不足以创建一个颜色为 \(3\) 的点,所以我们可以在右边创建一个颜色为 \(1\) 的点,那么就可以维持了,然后让 \(2, 1\)\(3\) 连边,我们考虑在左边创建一个颜色为 \(4\) 的点,但是还需要在右边创建一个颜色为三的点,而在右边创建一个颜色为 \(3\) 的点又需要在左边创建一个颜色为 \(2\) 的点,以此类推,但是如果我们在右边创建一个颜色为 \(4\) 的点,就只需要在左边创建一个颜色为 \(2\) 的点,所以我们可以果断在右边创建一个颜色为 \(4\) 的点,在左边创建一个颜色为 \(2\) 的点,那么按照这个规律向下推,我们便可以构造出一个颜色为 \(2 \times (k + 2)\) 的图

#include <bits/stdc++.h>using namespace std;using Pii = pair<int, int>;#define int long longint k, n;vector<Pii> e;signed main() {freopen("color.in", "r", stdin);freopen("color.out", "w", stdout);cin >> k;n = (2 + k) * 2;for (int i = 3; i <= n; i++) {for (int j = 1; j < i / 2 * 2; j++) {if ((j & 1) ^ (i & 1)) {e.push_back({i, j});}}}cout << n << " " << e.size() << " 2\n";for (int i = 1; i <= n; i++) {if (i == n) {cout << !(i % 2) + 1;}else cout << !(i % 2) + 1 << " ";}cout << "\n";for (auto [x, y] : e) {cout << x << " " << y << "\n";}return 0;
}

是的,代码就这么短

自由组队(teamup)

我们可以考虑直接暴搜每个队伍的长度,但是我们要保证长度是非严格递增的,我测试了一下, \(n = 60\) 大概只有 \(1e6\) 种,我们就可以放心大胆的暴搜,每次我们对于每个队伍选人,由于长度是严格递增的我们肯定是先选满足可以加入这个队伍中的 \(r_i\) 小的,所以暴搜加贪心即可

#include<bits/stdc++.h>using namespace std;using Pii = pair<long long, int>;const int N = 100 + 5;const long long INF = 1e18;struct node {int l, r;
}a[N];int t, n;long long w[N], ans;vector<int> v[N];map<Pii, long long> dp;void dfs(long long now, int cnt, int last, long long val) {if (dp.count({now, last}) && dp[{now, last}] > val) {return ;}dp[{now, last}] = val;if (!now) {ans = max(ans, val);}for (int i = last; i <= n - cnt + 1; i++) {long long tmp = now;int tot = 0;for (auto cur : v[i]) {if (tmp & (1ll << (cur - 1))) {tmp ^= (1ll << (cur - 1));tot++;}if (tot == i) {break;}}if (tot == i) {dfs(tmp, cnt + i, i, val + w[i]);}}
}bool cmp(node _x, node _y) {return _x.l < _y.l;
}void Solve() {cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i].l >> a[i].r;}for (int i = 1; i <= n; i++) {cin >> w[i];}sort(a + 1, a + n + 1, cmp);for (int i = 1; i <= n; i++) {vector<Pii> tmp;for (int j = 1; j <= n; j++) {if (a[j].l <= i && a[j].r >= i) {tmp.push_back({a[j].r, j});}}sort(tmp.begin(), tmp.end());for (auto cur : tmp) {v[i].push_back(cur.second);}}ans = -INF;dfs((1ll << n) - 1, 1, 1, 0);if (ans <= -1e17) {cout << "impossible\n";}else cout << ans << "\n";for (int i = 1; i <= n; i++) {v[i].clear();}dp.clear();
}int main(){ios::sync_with_stdio(0);cin.tie(0);freopen("teamup.in", "r", stdin);freopen("teamup.out", "w", stdout);cin >> t;while (t--) {Solve();}return 0;
}
/*
1
3
2 3
1 2
2 2
4 5 100
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/72796.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

数据采集与融合第二次作业

码云仓库地址 https://gitee.com/sun-jiahui22/crawl_project作业1仓库地址 https://gitee.com/sun-jiahui22/crawl_project/tree/master/作业2/实验2.1作业2的仓库地址 https://gitee.com/sun-jiahui22/crawl_project/tree/master/作业2/实验2.2作业3的仓库地址 https://gitee…

IntelliJ IDEA 2024 安装使用 (附加激活码、补丁,亲测有效!)

第一步:下载 IDEA 安装包 访问 IDEA 官网,下载 IDEA 2024.1.4 版本的安装包,下载链接如下 : idea官方链接也可以在这里点击下载idea下载idea 第二步: 安装 IDEA点击xx 关掉程序! 第三步: 下载补丁 下载地址(里面包含激活码)https://pan.quark.cn/s/9dbfe698c064 补丁下载成…

PYNQ z2 使用xadcps读取xadc内部电压温度

使用xadcps只能和JTAG一样读取温度值和电压值,属于内部通道,读取不了外部通道的数据 添加zynq700核后进行配置 1.在PS-PL Configuration中, 取消勾选general里面的FCLK_RSTEN_N以及M_AXI_GP0_Interface2.在Peripheral IO Pins中勾选14 15对应的UART0, 同时对板卡电压进行配置,B…

控制结构

任何复杂的结构化程序都是由三种基本结构组成:顺序结构,分支结构、循环结构。 分支结构 单分支。if 双分支。if else 多分支。else if else if多分支 switch多分支 else if 于 switch多分支的区别循环结构 for循环 while循环 do while循环 for、while与do ... while语句的比较…

《恋与深空》游戏拆解

游戏背景与世界观《恋与深空》是一款女性向3D手游,设定在未来的科幻世界。玩家与多名男性角色互动,通过一系列科幻冒险推动剧情发展。角色设定与互动机制玩家可以与多个男性角色展开深度互动,每个角色不仅有鲜明的个性和背景故事,还伴随着成长线的发展。角色的互动不仅仅是…

CSP2024 前集训:多校A层冲刺NOIP2024模拟赛08

前言光顾着想 T2 了,但是不知道哪儿假了,只有 \(\dfrac{n}{k}\le 5\) 的点是对的,然后居然只有二十分,发现数据放错了,找喵喵改了成五十了。 然后 T1 因为重边挂没了。 T3 没调出来,确切的说是省的时间不多了打不完,就写了个部分分。 T4 咕了。 机房凳子没靠椅,一直坐着…

信息学奥赛复赛复习18-CSP-J2022-01解密-二分答案、二分找边界、二分时间复杂度、二分求最小

PDF文档公众号回复关键字:202410171 P8814 [CSP-J 2022] 解密 [题目描述] 给定一个正整数 k,有 k 次询问,每次给定三个正整数 ni,ei,di,求两个正整数 pi,qi,使 ni=piqi、eidi=(pi−1)(qi−1)+1 [输入格式] 第一行一个正整数 k,表示有 k 次询问。 接下来 k 行,第 i 行三个…

ollydbg逆向基础

实验目的 理解编译过程和调试信息,了解debug模式和release模式的exe进行逆向分析的过程。尝试多种方法找到main函数。实验环境系统:Windows 11软件:VS、ollydbg实验代码#include <stdio.h>int main() { printf("hello maqun"); return 0;}实验过程查找代…