每日刷题(二分图,二分查找,dfs搜索)

目录

1.P3853 [TJOI2007] 路标设置

2.P1129 [ZJOI2007] 矩阵游戏

3.P1330 封锁阳光大学

 4.Trees

5.P1141 01迷宫


1.P3853 [TJOI2007] 路标设置

P3853 [TJOI2007] 路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

先求出每个路标之间的距离,再二分查找每个mid,如果有间距大于mid的,那我们就设立路标,到最后,看新设置的路标数量是否在要求的范围之内。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<map>
#define ll long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 2000100;
const int M = 1e8 + 7;
int base1 = 131, base2 = 13311;
ll w, n, k;
ll a[N];
bool check(ll x) {
	ll ans = 0;
	for (int i = 1; i < n; i++) {
		if(a[i]>x)
		{
			ans+=(a[i]-1)/x;
		}
	}
	return ans<=k;
}
void solve() {
	cin >> w >> n >> k;
	for (int i = 1; i <= n; i++) cin >> a[i];
	sort(a + 1, a + 1 + n);
	for (int i = 1; i <= n - 1; i++) a[i] = a[i + 1] - a[i];
	ll L = 1, R = w, mid;
	while (L < R) {
		mid = L + R >> 1;
		if (check(mid)) {
			R = mid ;
		} else L = mid+1;
	}
	cout << R << "\n";
}
int main() {
	
	solve();
	return 0;
}

2.P1129 [ZJOI2007] 矩阵游戏

P1129 [ZJOI2007] 矩阵游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

其实就是二部图的最大匹配,在我们给出的矩阵中,我们给(i,j)建边,当找到的最大匹配大于等于n时,那就说明可以组成一条主对角线的元素都为1。

我们这里用到匈牙利算法。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<map>
#define ll long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 100010;
const int M = 200010;
int base1 = 131, base2 = 13311;
ll n, m, head[N], cnt, colour[N], match[N], v[N];
struct Node {
	int u, v;
} e[N];
void add(int u, int v) { //链式前向星存图
	e[++cnt].u = v;
	e[cnt].v = head[u];
	head[u] = cnt;
}
void bak()
{
	for(int i=0;i<=n;i++)
	{
		e[i].u=e[i].v=v[i]=match[i]=head[i]=0;
	}
	cnt=0;
}
bool dfs(int p,int tag)
{
	if(v[p]==tag) return false;
	v[p]=tag;
	for(int i=head[p];i;i=e[i].v)
	{
		int pos=e[i].u;
		if(!match[pos]||dfs(match[pos],tag))
		{
			match[pos]=p;
			return true;
		}
	}
	return false;
}
void solve() {
	cin>>n;
	for (int i = 1, x; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cin >> x;
			if (x) add(i, j );
		}
	}
	ll ans = 0;
	for (int i = 1; i <= n; i++) {
		if (dfs(i,i)) ans++;
	}
	if (ans >= n) cout << "Yes\n";
	else cout << "No\n";
	bak();
}
int main() {
	TEST
	solve();
	return 0;
}

3.P1330 封锁阳光大学

P1330 封锁阳光大学 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

首先判断是否构成二分图,用染色法每次遍历的时候,答案累加上此时染成两个集合中元素的最小值。

最后输出答案。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<map>
#define ll long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 100010;
const int M = 200010;
int base1 = 131, base2 = 13311;
ll n, m, head[N], cnt, colour[N], match[N], v[N], Ans[4];
struct Node {
	int u, v;
} e[N];
void add(int u, int v) { //链式前向星存图
	e[++cnt].u = v;
	e[cnt].v = head[u];
	head[u] = cnt;
}
bool find1(int x, int tag) {
	colour[x] = tag;
	Ans[tag]++;
	for (int i = head[x]; i; i = e[i].v) {
		int pos = e[i].u;
		if (!colour[pos]) {
			if (!find1(pos, 3 - tag)) return false;
		} else {
			if (colour[pos] == tag) return false;
		}
	}
	return true;
}
void solve() {
	cin >> n >> m;
	for (int u, v; m; m--) {
		cin >> u >> v;
		add(u, v);
		add(v, u);
	}
	ll ans = 0;
	for (int i = 1; i <= n; i++) {
		Ans[1] = 0, Ans[2] = 0;
		if (!colour[i]) {
			if (!find1(i, 1)) {
				cout << "Impossible\n";
				return;
			}
		}
		ans += min(Ans[2], Ans[1]);
	}
	cout << ans << "\n";
}
int main() {
	solve();
	return 0;
}

 4.Trees

2665 -- Trees (poj.org)

先将每个起点和终点排序,安装具体情况更新L和R,最后答案减去(R-L+1)。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<map>
#define ll long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 5010;
const int M = 200010;
int base1 = 131, base2 = 13311;
ll n, m, head[N], cnt, colour[N], match[N], v[N];
struct Node {
	ll u, v;
} e[N];
bool cmp(Node a, Node b) {
	if (a.u == b.u) return a.v < b.v;
	return a.u < b.u;
}
void solve() {
	while (cin >> n >> m) {
		if(n==m&&n==0) break;
		for (int i = 1; i <= m; i++) {
			cin >> e[i].u >> e[i].v;
			if (e[i].u > e[i].v) swap(e[i].u, e[i].v);
		}
		sort(e + 1, e + 1 + m, cmp);
		ll ans = n + 1;
		ll L = e[1].u, R = e[1].v;
		for (int i = 2; i <= m; i++) {
			if (e[i].u <= R) {
				R = e[i].v;
				continue;
			}
			if (e[i].u > R) {
				ans -= (R - L + 1);
				L = e[i].u;
				R = e[i].v;
				continue;
			}
		}
		cout << (ans - R + L - 1) << "\n";
	}
}

int main() {
	solve();
	return 0;
}

5.P1141 01迷宫

P1141 01迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

我们知道,就是寻找按照要求的联通块,我们可以用dfs遍历,这样询问时,只需要找到这个位置在哪个联通块里面,每个联通块的权重就是联通块内元素的数量。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<map>
#define ll long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 2000100;
const int M = 1e8 + 7;
int base1 = 131, base2 = 13311;
char mp[1001][1001];
int ans[1001][1001];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
map<ll,ll>f;
int cnt=0;
ll n,m;
void dfs(int x,int y,char tag)
{
	if(x<1||y<1||x>n||y>n) return;
	ans[x][y]=cnt;
	f[cnt]++;
	for(int i=0;i<4;i++)
	{
		int tx=x+dx[i];
		int ty=y+dy[i];
		if(!ans[tx][ty]&&mp[tx][ty]=='1'-mp[x][y]+'0')
		{
			dfs(tx,ty,'1'-mp[x][y]+'0');
		}
	}
	
}
void solve() {
	
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>mp[i][j];
		}
	}
	for(int i=1,x,y;i<=m;i++)
	{
		cin>>x>>y;
		if(ans[x][y]) cout<<f[ans[x][y]]<<"\n";
		else cnt++,dfs(x,y,mp[x][y]),cout<<f[cnt]<<"\n";
	}
}
int main() {
	
	solve();
	return 0;
}

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

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

相关文章

妙笔生词智能写歌词软件:科技赋能艺术还是冲淡原味?

在当今数字化的时代&#xff0c;科技的触角延伸至艺术创作的各个领域&#xff0c;妙笔生词智能写歌词软件便是其中一个引人瞩目的产物。然而&#xff0c;它的出现引发了一场关于科技与艺术关系的深刻思考&#xff1a;究竟是为艺术创作赋予了新的能量&#xff0c;还是在不经意间…

【密码学】哈希函数与加密算法的关系

一、哈希函数的定义 哈希函数&#xff08;Hash Function&#xff09;&#xff0c;也被称为散列函数或杂凑函数&#xff0c; 是一种将任意长度的输入数据&#xff08;通常称为“预映射”或“消息”&#xff09;转换为固定长度输出&#xff08;通常称为“哈希值”、“散列值”、“…

软链接node_modules

公司项目很多微应用的子项目公用同一套模板&#xff0c;也就会使用同一个node_modules 1.先创建3个同样的项目,并安装一个其中的一个node_modules给他丢到外边 2.win r -------> cmd --------> ctrlshift enter(已管理员身份打开cmd) 3.在窗口分别执行以下代码…

医学王者刊!影响因子自创刊只增不减,3区跃升1区,国人发文占比6成!

【SciencePub学术】今天给大家推荐的是一本医学领域的SCI&#xff0c;是1本颇富潜力的国产期刊。影响因子自创刊以来就逐年上涨&#xff0c;凭借自己的努力从中科院3区跃迁至中科院1区&#xff0c;据说很多人已经靠信息差吃上了这本期刊的红利&#xff0c;接下来给大家解析一下…

卷积是如何计算的

使用代码&#xff0c;看卷积是如何计算的。 torch.nn torch.nn.functional srtide 的用法&#xff0c;代表卷积核的步幅 import torch import torch.nn.functional as F # 这个是输入的一个二维矩阵 input torch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],…

SpringBoot相关

SpringBoot 1. what springboot也是spring公司开发的一款框架。为了简化spring项目的初始化搭建的。 spring项目搭建的缺点&#xff1a; 配置麻烦依赖繁多tomcat启动慢 2 .springboot的特点(why) 自动配置 springboot的自动配置是一个运行时(更准确地说&#xff0c;是应用程…

【学术会议征稿】第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)

第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence and Intelligent Information Processing 第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09;将于…

SAP 物料批量执行MD02代码分享

通常我们在运行MRP的时候要么就是跑MD01整个工厂层级的,要么就是单个物料层级的MRP用MD02去单个物料去执行。 HANA后有了MRPLIVE,可以支持多物料的运行MRP,但是无法控制MRP的运行参数,根据采购类型跑出对应的单据,F跑出的采购申请,E跑出的是计划订单。 需求是要可以批量运…

网上下载的视频怎么转成mp4格式?教你一招轻松解决

网上拥有许多的视频资源&#xff0c;动漫&#xff0c;短视频&#xff0c;影视等等都层出不穷&#xff0c;很多小伙伴都会把一些视频进行下载下来&#xff0c;不过下载下来的视频都不是MP4格式的&#xff0c;在兼容性方面会比较的麻烦&#xff0c;会有播放器不支持的情况&#x…

SpringBoot新手快速入门系列教程十:基于Docker Compose,部署一个简单的项目

前述&#xff1a; 本篇教程将略过很多docker下载环境配置的基础步骤&#xff0c;如果您对docker不太熟悉请参考我的上一个教程&#xff1a;SpringBoot新手快速入门系列教程九&#xff1a;基于docker容器&#xff0c;部署一个简单的项目 使用 Docker Compose 支持部署 Docker 项…

Elon Musk开源Grok

转载自&#xff1a;AILab基地 早在6天前&#xff0c;马斯克就发文称xAI将开源Grok 图片 13小时前&#xff0c;马斯克开源了旗下公司X的Grok训练模型&#xff0c;并喊话OpenAI&#xff0c;你名字里的Open到底在哪里 图片 下面是xai-org的GitHub开源地址[https://github.com/x…

shein测试开发会问些啥?

&#x1f3c6;本文收录于《CSDN问答解惑-》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

【大模型搭建】部署Ollama,pull失败,手动构建方案

Ollama 是一个专注于简化大规模机器学习模型开发的框架。它提供了一系列工具来帮助开发者轻松地定义、训练和部署大型语言模型。 优点&#xff1a; • 提供了简洁的API&#xff0c;易于上手。 • 支持多种硬件加速选项&#xff0c;如GPU和TPU。 • 内置了许多预训练模型&#x…

常见点云处理总结汇总

点云处理是一系列操作和技术&#xff0c;用于分析和处理三维点云数据&#xff0c;以提取有用的信息并生成可视化结果。以下是常见的点云处理方法及其简要说明&#xff1a; 1. 点云预处理 滤波&#xff1a;去除噪声和无效点&#xff0c;如使用统计滤波、半径滤波等。下采样&a…

IDEA自动生成测试类以及测试方法(JUnit测试工具)

IDEA自动生成测试类以及测试方法 (1) 光标移至需要生成测试类的类后面&#xff0c;右击 Go To → Test, 或者直接使用快捷键 Ctrl Shift T 。 &#xff08;2&#xff09;点击 Create New Test &#xff08;3&#xff09;设置测试库和测试方法&#xff0c;点击 OK &#xff…

赋能 Web3 与 AI 的未来,TARS 协议如何重塑去中心化生态?

TARS 协议如何在 Web3 生态中引领 AI 技术的变革&#xff1f;作为新兴的模块化 AI 平台&#xff0c;TARS 通过整合先进的 AI 模型和区块链技术&#xff0c;为用户提供了更加智能、安全和高效的解决方案。让我们一起回顾第 16 期 TinTinAMA 的精彩内容吧&#xff01; 在 TinTinL…

一场夏测杀出个“双冠王”,极越01成为纯电SUV标杆

文 | AUTO芯球 作者 | 雷慢 万万没想到&#xff0c;懂车帝夏测运动会杀出一匹最大的黑马&#xff0c;竟然是极越01。 当前正在进行的懂车帝夏测运动会&#xff0c;在“纯电SUV/MPV续航达成率”赛事中&#xff0c;极越01以85.8%的续航达成率获得第一名。并且由于赛制规则限制…

WebRTC批量发送消息API接口的特性有哪些?

WebRTC批量发送消息api接口怎么样&#xff1f;接口性能怎么用&#xff1f; WebRTC技术允许浏览器和移动应用进行实时通信。通过WebRTC&#xff0c;开发者可以构建视频、语音、数据共享等应用。AokSend将重点探讨WebRTC批量发送消息API接口的特性。 WebRTC批量发送消息API接口…

《昇思25天学习打卡营第1天|QuickStart》

说在前面 曾经接触过华为的910B服务级显卡&#xff0c;当时基于910B做了一些开发的工作&#xff0c;但是总感觉做的事情太低层&#xff0c;想要能自顶向下的了解下&#xff0c;因此开始了MindSpore的学习。另外也想给予提供的显卡&#xff0c;简单尝试下llm模型的训练&#xf…

静态时序分析:Leaf Cell(叶单元)

相关阅读​​​​​​​静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 在DC中&#xff0c;leaf cell&#xff08;叶单元&#xff09;有时会出现在描述中&#xff0c;例如set_input_delay的-reference_pin选项的参数&#xff0c;就必须是一个端口或…