[Codeforces1155F][DP]Delivery Oligopoly

【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio) 本文介绍 Windows 环境下无需安装 Visual Studio,搭建 Qt6 与 MSVC2022 开发环境的方法,以节省磁盘空间。核心步骤包括:用中科大镜像提速 Qt6 在线安装,需勾选 Qt Creator 17.0.1、MSVC 2022 x64 等组件;配置环境变量,添加 mingw_64、msvc2022_64 及 Qt Creator 的二进制目录;安装 MSVC 2022 编译器与 Windows 10 SDK 并记录版本;配置 Qt Creator 构建套件,可选设置 vcvarsal 阅读详情

翻译

给你一张双联通图,问你最少留下多少条边使得他还是双联通
这里的双联通指两点能够通过至少两条边不相交路径互达

题解

貌似是一个经典问题
fuck考场掉分一点都不想写这场题解来着…
我们考虑成为答案的双联通图是可以怎么构造的
我们可以每次拿出一条链,然后使得答案的双连通图变成一个更小的双联通图
然后一个思路就出来了
预处理一个g[S][x][y]g[S][x][y]g[S][x][y]表示从xxx到yyy的链,经过了状态SSS中的点,能否走出这样的链
然后考虑f[S]f[S]f[S]表示状态SSS中的点作为双联通分量的最小边数
转移直接枚举子集转移
记录一下方案就好了…

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<ctime>
#include<map>
#include<bitset>
#include<set>
#define LL long long
#define mp(x,y) make_pair(x,y)
#define pll pair<long long,long long>
#define pii pair<int,int>
using namespace std;
inline int read()
{
	int f=1,x=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int stack[20];
inline void write(int x)
{
	if(x<0){putchar('-');x=-x;}
    if(!x){putchar('0');return;}
    int top=0;
    while(x)stack[++top]=x%10,x/=10;
    while(top)putchar(stack[top--]+'0');
}
inline void pr1(int x){write(x);putchar(' ');}
inline void pr2(int x){write(x);putchar('\n');}
const int MAXN=15;
const int MAXMASK=(1<<14);
struct edge{int x,y,next;}a[MAXN*MAXN*2];int len,last[MAXN];
void ins(int x,int y){len++;a[len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len;}
int g[MAXMASK][MAXN][MAXN],f[MAXMASK];
int pre1[MAXMASK][3],pre2[MAXMASK][MAXN][MAXN][3];
int n,m,nxt[MAXN],bin[25];
void upd(int &x,int y){x=x<y?x:y;}
void solve2(int S,int x,int y)
{
	if(x==y)return ;
	int o=pre2[S][x][y][0];
	int nS=S,nx=x,ny=y;
	if(!o)pr1(x),pr2(pre2[S][x][y][1]),nS^=bin[x],nx=pre2[S][x][y][1];
	else pr1(y),pr2(pre2[S][x][y][1]),nS^=bin[y],ny=pre2[S][x][y][1];
	solve2(nS,nx,ny);
}
void solve1(int S)
{
	if(!pre1[S][0])return ;
	int e1=pre1[S][0],e2=pre1[S][1],msk=pre1[S][2];
	solve2(msk,e1,e2);
	int ne=S^msk;
	for(int i=1;i<=n;i++)if(bin[i]&(ne&nxt[e1])){pr1(i);break;}
	pr2(e1);
	for(int i=n;i>=1;i--)if(bin[i]&(ne&nxt[e2])){pr1(i);break;}
	pr2(e2);
	solve1(ne);
}
int ct[MAXMASK];
int main()
{
	bin[1]=1;for(int i=2;i<=20;i++)bin[i]=bin[i-1]<<1;
	for(int i=1;i<MAXMASK;i++)ct[i]=(ct[i>>1]+(i&1));
	n=read();m=read();
	for(int i=1;i<=m;i++)
	{
		int x=read(),y=read();
		ins(x,y),ins(y,x);
		nxt[x]|=bin[y];nxt[y]|=bin[x];
	}
	memset(g,63,sizeof(g));int INF=g[0][0][0];
	for(int i=1;i<=n;i++)g[bin[i]][i][i]=0;
	for(int S=1;S<bin[n+1];S++)for(int x=1;x<=n;x++)if(S&bin[x])for(int y=1;y<=n;y++)if(S&bin[y]&&g[S][x][y]!=INF)
	{
		for(int k=last[x];k;k=a[k].next)if(!(S&bin[a[k].y]))
		{
			upd(g[S|bin[a[k].y]][a[k].y][y],g[S][x][y]+1);
			if(g[S|bin[a[k].y]][a[k].y][y]==g[S][x][y]+1)pre2[S|bin[a[k].y]][a[k].y][y][0]=0,pre2[S|bin[a[k].y]][a[k].y][y][1]=x;
		}
		for(int k=last[y];k;k=a[k].next)if(!(S&bin[a[k].y]))
		{
			upd(g[S|bin[a[k].y]][x][a[k].y],g[S][x][y]+1);
			if(g[S|bin[a[k].y]][x][a[k].y]==g[S][x][y]+1)pre2[S|bin[a[k].y]][x][a[k].y][0]=1,pre2[S|bin[a[k].y]][x][a[k].y][1]=y;
		}
	}
	memset(f,63,sizeof(f));
	for(int i=1;i<=n;i++)f[bin[i]]=0;
	for(int S=1;S<bin[n+1];S++)
	{
		for(int u=(S-1)&S;u;u=(u-1)&S)if(f[S^u]!=INF)
		{
			int ps=S^u;
			for(int x=1;x<=n;x++)if((u&bin[x])&&(nxt[x]&ps))
				for(int y=x+1;y<=n;y++)if((u&bin[y])&&(nxt[y]&ps)&&g[u][x][y]!=INF)
				{ 
					upd(f[S],f[ps]+g[u][x][y]+2);
					if(f[S]==f[ps]+g[u][x][y]+2)pre1[S][0]=x,pre1[S][1]=y,pre1[S][2]=u;
				}
			if(ct[u]==1)
			{
				for(int x=1;x<=n;x++)if(u&bin[x]&&ct[nxt[x]&ps]>=2)
				{
					upd(f[S],f[ps]+2);
					if(f[S]==f[ps]+2)pre1[S][0]=x,pre1[S][1]=x,pre1[S][2]=u;
				}
			}
		}
	}
	pr2(f[bin[n+1]-1]);
	solve1(bin[n+1]-1);
	return 0;
}
【基于CKF的IMM】CV和CT两个模型下的IMM,二维,滤波使用CKF(容积卡尔曼滤波),附完整的matlab代码 该文章摘要: 本文提出了一种基于交互多模型(IMM)和容积卡尔曼滤波(CKF)的融合定位算法,用于解决目标在直线运动和转弯机动之间的模型切换问题。通过MATLAB仿真实现了IMM-CKF算法,并与单一的CV-CKF(匀速模型)和CT-CKF(匀角速转弯模型)方法进行对比。实验结果表明,在包含直线段和转弯段的复合轨迹跟踪中,IMM-CKF方法能够自适应调整模型权重,显著提高了定位精度。轨迹跟踪图、位置/速度误差对比图以及模型概率曲线直观展示了IMM算法的优势。文章提供了完整的MATLAB实现代码,可用于目标跟 阅读详情

相关推荐

linux 内核vxlan收发包流程

1.vxlan口收包处理流程 前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层的数据处理这次不再解析,直接从__netif_receive_skb_core开始) #物理网卡处理中断,触发softirq i40e_intr └─napi_schedule_irqoff #i40e softirq把包放到per cpu backlog,触发softirq i40e_napi_p

魏言华的博客 3826

【CodeForces】【状压DP】1155F-Delivery Oligopoly

CodeForces 1155F Delivery Oligopoly 题目大意 给定一个已经是边双联通分量的图,要求删掉最多的边,使得最终得到的图是也是一个边双联通分量。输出保留的边。 分析 考虑我们如何构造出一个边双联通分量。 我们发现最终的答案一定是一个环带上一个环的样子(有点像糖葫芦)。 于是考虑强制以111为起点,每次向上面加上一条链。 考虑如何按照这样的方式来计算答案。 首先预处理一个...

IDDFS 397

vrep和matlab,使用Matlab与V-REP联合仿真 - Play V-REP with Matlab

OS: Win10 x64Matlab: R2016bV-REP: V-REP PRO EDU v3.5.0 下载、安装与支持V-REP操作基础V-REP仿真基础Matlab环境准备一个简单的例子对V-REP有一定了解的读者可以直接跳到第三节Matlab环境准备。下载、安装与支持V-REP提供Windows、Linux和MacOS三个平台的应用程序支持,任意平台都提供教育版和专业版两个版本。教育版...

weixin_42660494的博客 3211

codeforces1155F Delivery Oligopoly

题面 题意 给出一张无向图,问至少保留几条边才能使此图是一个边双,并输出方案. 做法 考虑怎么构造出一个边双,发现可以通过在一个小边双上加一条链,使它变为一个新的大边双,所以可以记f[u][v][i]f[u][v][i]f[u][v][i]表示是否存在一条从u到v的链上包含了状态i的点,然后进行dp,dp[i]dp[i]dp[i]表示状态为i的点组成的边双至少要有几条边,用f数组进行转移即可. 代...

yzyyylx的博客 493

使用ChIPSeeker进行ChIP-seq, ATAC-seq,cut&tag等富集峰的基因组注释

常规的下一代高通量测序(next generation sequencing, NGS)实验通常产生大量短片段(reads),通常我们需要将这些reads比对到参考基因组/转录组上,即将它们置于生物学上有意义的基因背景下,才能获得有意义的结果。一般我们认为会产生两种类型的数据(当然两者并无严格意义上的区分)

微生信 3320

UM2 3D 打印机 DIY 实践 (2) 电路篇

涉及到的东西非常多,实际上后面还会讲到。主要部件清单: 主板 mega2560 + Ramps1.4 + LCD12864 各一张 42 x38mm x3,xyz 轴各一台 42 x23mm x1,用在挤出机 泰坦远程挤出机 x1 TMC2225 驱动板 x4, 替代a4988、TMC2208,静音效果好,性价比高 s-250-12v 20A开关电源 x1。功率必须足够大,宁可选大一点的 大功率 MOS 管,25A x1 NTC .

afeiqiang的专栏 3602

CF1155F Delivery Oligopoly

题意:给定简单无向图,求一个最小的边集使得这些点是边双,输出方案。n <= 14 解:考虑一个边双肯定是一条一条的链拼起来的。于是每次枚举一条链加上去就行了。 设fs表示点集s形成边双的最小边数。linki,j,s表示点集s能否形成一个i - j的链。link2x,s表示点x和点集s是否直接相连。 上面这些数组都要记录方案,特别地,link2要记录两个方案,为了应对拼上去的链退化成一个...

weixin_34388207的博客 267

合肥工业大学操作系统实验9

依据操作系统课程所介绍的页面置换算法与动态内存分配的原理,本实验的目的是掌握OPT、FIFO、LRU、LFU、Clock等页面置换算法;掌握可用空间表及分配方法;掌握边界标识法以及伙伴系统的内存分配方法和回收方法。从而深入理解操作系统的内存管理。从而加深对教材上页面置换算法与动态内存分配的理解。

Martin-share的博客 1095

Codeforces Round 63 (Rated for Div. 2) F. Delivery Oligopoly dp+图论状态转移

题目链接: https://codeforces.com/contest/1155/problem/F 题意: 现在给你一个 141414 个点的无向边双联通图,现在要你删掉一些边,使得留下来的边最少并且仍旧是一个边双联通图。 一个边双联通分量(也就是题目要求的边双联通图)要求任意两个点之间有至少两条不相交的路径可以达到。 做法: 表示题目真难啊…不看真的做不太出来,只是能大约摸到点门路而已。 自...

人生如戏 209

第25节:cesium 地形开挖综合实例-地下管网(含源码+视频)

地图开挖综合示例,包括底图切换,绘制开挖区域,移除开挖区域,影藏地图等等。

qq_29384639的博客 1782

彻底解析 DDIC_TYPE_INCONSISTENCY:从 ABAP ST22 连环 Dump 到 SE14 一键修复

听上去像内核级的致命故障,实则更多源于日常运维的细枝末节。只要掌握的排查三板斧,结合严格的变更流程与周期性的字典体检,再严重的 Dump 也能化险为夷。希望本文的案例与步骤能帮助读者在下一次遇到类似问题时,既能快速止血,也能追根溯源,避免重蹈覆辙。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 629

Codeforces 1155F Delivery Oligopoly dp(看题解)

看别人写的才学会的。。。 我们考虑刚开始的一个点, 然后我们枚举接上去的一条一条链, dp[mask]表示当前已经加进去点的状态是mask所需的最少边数。 反正就是很麻烦的一道题, 让我自己写我是写不出来的。。。 我好菜啊。 #include<bits/stdc++.h> #define LL long long #define LD long double ...

169

Nerf 训练自有数据

colmap相机位姿转为LLFF格式数据

zfjBIT的专栏 2309

Codeforces 1155D

给一个序列,可以将一个连续子序列的每个值都乘x,问这样操作以后能得到的最大连续子序列的值是多少. dp可搞, dp[i][0]表示到i时没有使用乘x操作能获得的最大连续子序列的值dp[i][0] = max(a[i],dp[i-1][0] + a[i]) dp[i][1]表示到i时正处在在乘x的操作中能获得的最大连续子序列的值 则dp[i][1] = max(dp[i][1],max(dp[i-1...

winhcc的博客 251

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【Codeforces 1155D】 Beautiful Array

CF1155D 题意 给你n个数字的数组 然后还有一个 x 你可以选择一段区间乘上 x 输出最大子段和 这道题做的时候一直在往贪心想 真的是脑子太笨了 实验室其他大佬都是拿dp过的 本着笨鸟先飞的思想赶紧学了过来 dp[300025][3] 其中第二维代表了三个状态 0 就是不操作乘法 1 操作乘法 2 操作乘法结束以后 然后我们只要不断取 ans = max(dp[i][0],max(dp[i]...

我是谁 --- 卡比兽 424

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

CodeForces-1155D Beautiful Array(DP)

dp[i][0]:以a[i]结尾的最大字段和,前面先不考虑是不是以a[i]还是a[i]*x结尾 dp[i][1]:以a[i]*x结尾的最大字段和,考虑前面是以a[i]还是以a[i]*x结尾 dp[i][2]:以a[i]结尾的最大字段和,考虑前面是以a[i],a[i]*x或者前面的前面的以a[i],a[i]*x结尾 #include <bits/stdc++.h> using names...

FreeGo~ 436

Codeforces 1155F 状压DP

题意:给你一张图,问最少保留多少条边,使得这张图是边双联通分量。 思路:如果一个点集中的点已经是边双联通分量,那么从这个点集中的点x出发,经过若干个不是点集中的点,回到点集中的点y(x可能等于y),那么这条路径上的点和原来的点就构成了一个新的边双联通分量。 设dp[i]是状态i中的点构成边双联通分量需要的最少的边数,那么我们需要枚举dp[i]的子集,然后判断剩下的点能不能通过一条链串起来,如果...

weixin_30709809的博客 163

CodeForces ~ 996F ~ Game (概率期望)

题意 给定n,然后给个2n2n2^n个数字编号为000~2n−12n−12^n-1(即数组C),A和B两个人在玩游戏,有一个数字f,一开始 f 的每一个二进制位都是-1。操作n次,每次随机挑一个人把某一个-1变为0或1。最终得到C[f]的值,A想让这个值大,B想让这个值小,问这个值的期望为多少? r 个问题,如果把c[z]变为g,期望值为多少?输出r+1行,原始期望和 r 个问题的期望。 ...

张松超的博客 660

RabbitMQ学习笔记

参考链接: http://www.rabbitmq.com/getstarted.html RabbitMQ的官方入门教材,参考3也基于它http://blog.youkuaiyun.com/linvo/article/details/5750987 RabbitMQ和Python的入门经典:《兔子和兔子窝》,原文地址已失效http://www.01happy.com/python-pika-r

daineng的专栏 1万+

codeforces 1155D Beautiful Array

hls J 了我一手,我还是写错,菜枯.jpg ,眼看小号就要追上大号了,突然2场掉了120分。。。 x是正数的话,我们直接就求最大子区间和乘以x,x<=0的话,可以知道我们如果选择[j,i]乘以x,那么最大值就是[j,i]*x+i右边能拓展出的最大区间和+j左边能拓展出的最大区间和, 我们设f1mx[j]表示以j结尾的能向左拓展出的最大区间和,f2mx[i]表示以i开头能向右拓展出的最...

binarycopycode 537

[codeforces1110D]Jongmah

time limit per test:3 seconds memory limit per test:256 megabytes You are playing a game of Jongmah. You don’t need to know the rules to solve this problem. You have n tiles in your hand. Each tile ha...

dxyinme-Zz 830

pause()函数

只有EINTR 有信号到达中断此函数的执行。 头文件:#include 定义函数:int pause(void); 函数说明:pause()会令目前的进程暂停(进入睡眠状态), 直到被信号(signal)所中断. 返回值:只返回-1. pause - 等待信号 内容简介 #include int pause(void); 描述 pause() 库函数使调用进

2puT 2万+

RCA:未注意Curl-library Post 1024以上字节时的HTTP/1.1特性导致 HessianPHP 传输数据失败...

先列出 HessianPHP 的错误提示:     CURL transport error: transfer closed with outstanding read data remaining 基础知识背景: 1)“Expect: 100-continue”的来龙去脉:     HTTP/1.1 协议里设计 100 (Continue) HTTP 状态码的的目的是,在客户端...

weixin_33858249的博客 367

codeforces1155D. Beautiful Array 区间DP

题目链接 ~~~~~~ 给出一个数组,你可以从这个数组中选一个区间,将区间内得所有数乘以X,求这个数组连续子数组的最大和。 首先弱化问题为 求一个数组中连续子数组的最大和 之后再考虑选取一个区间乘以X #include <stdio.h> #include <climits> #include <cstring> #include <time.h&g...

突破吧!次元壁 209

rabbitmq中的consumerTag和deliveryTag分别是干啥的,有什么用?

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34185364的博客 1万+

Codeforces - 1155D - Beautiful Array

地址 https://codeforces.com/contest/1155/problem/D 原文地址 https://www.lucien.ink/archives/420/ 题意 你有一个长为 nnn 的序列,你可以选择一个子区间(可以为空),将这个子区间所有的元素乘以 xxx ,问做完上述操作之后这个序列的最大连续区间和可以是多少。 题解 记状态为 f[i][status] ,其中 st...

LucienShui 598
上一篇: 20190424NOI.AC省选模拟
下一篇: [bzoj3579][乱搞]破冰派对
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值