20241016下午

news/2024/10/19 0:26:11/文章来源:https://www.cnblogs.com/libohan/p/18472961

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.hqwc.cn/news/816540.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

码云仓库地址 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语句的比较…

JAVA基础知识补漏

变量类型 1.类变量:static 2.实例变量:需要new 3.局部变量:必须初始化 常量 final 一般用大写表示 命名规范 所有变量、方法、类名:见名知意 类成员变量:首字母小写和驼峰原则:monthSalary 局部变量:首字母小写和驼峰原则 常量:大写字母和下划线:MAX_VALUE 类名:首字母大写和…

《恋与深空》游戏拆解

游戏背景与世界观《恋与深空》是一款女性向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;}实验过程查找代…

PyCharm配置PyTorch环境(完美解决找不到Conda可执行文件python.exe问题)

出现的问题 以下是第一次踩坑的流程,具体解决方法附在后面 新建一个python项目,如图所示设置相关信息设置项目名称和位置 interpreter type(python解释器类型)==>自定义环境 环境==>Generate new,创建一个新环境 类型==>conda python==>3.11,如下所示,在创建好…

07-SQL注入(联合注入、报错注入、盲注)

1、在不依赖于DVWA后端数据库的情况,如何通过前端验证的方法判断DVWA中的注入点是数字型注入还是字符型注入?(提示:用假设法进行逻辑判断)在dvwa靶场中SQL Injection模块输入1 and 1=1如果是数字型注入输入内容没有被网站进行任何处理,可以查询到 输入内容被网站进行处理…

BUUCTF之Sandbox-bad

BUUCTF之Sandbox-bad 首先针对sandbox,我们需要有一个大概的认知,他是在一个代码执行环境下,脱离种种过滤和限制,最终成功拿到shell权限的过程,通常我们采用orw的方式来获取flag.orw全称only read write,只使用read write函数将flag读取并且打印,shellcode分为三个步骤使用…