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

news2024/9/20 23:31:06

目录

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;
}

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

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

相关文章

渔人杯——RE

贪吃蛇的秘密 修改代码后&#xff0c;报了一个错 # uncompyle6 version 3.9.1 # Python bytecode version base 3.7.0 (3394) # Decompiled from: Python 3.11.8 (tags/v3.11.8:db85d51, Feb 6 2024, 22:03:32) [MSC v.1937 64 bit (AMD64)] # Embedded file name: snake1.py…

渐变且描边文字

效果&#xff1a; 用 background-image&#xff1a;linear-gradient实现渐变、 text-shadow实现描边 元素同时添加&#xff1a; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 1), rgba(143, 180, 253, 1));-webkit-background-clip: text;background-…

笔记本电脑数据丢失如何恢复?

在计算机网络日益普及的今天&#xff0c;计算机已波及到人们的生活、工作、学习及消费等广泛领域&#xff0c;其服务和管理也涉及政府、工商、金融及用户等诸多方面。笔记本电脑等电子产品被各行各业的人所喜爱和接受&#xff0c;早已成为人们出差的必备品&#xff0c;可以用来…

彻底解决找不到d3dcompiler_43.dll问题,总结几种有效的方法

运行软件时提示找不到d3dcompiler_43.dll无法继续执行代码&#xff0c;如何解决&#xff1f;解决这个问题的方法有很多&#xff0c;但具体问题需要具体分析&#xff0c;有些方法可能并不适用于解决d3dcompiler_43.dll的问题。因此&#xff0c;需要根据实际情况来选择合适的方法…

【LeetCode:1071. 字符串的最大公因子 + 模拟 + 最大公约数】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【全面介绍Oracle】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 目录 🎥前言🎥基本概念和安装🎥SQL语言🎥PL/SQL编程🎥数据库…

基于webpack创建plugin并发布npm包

webpack 1. 什么是webpack webpack是一个模块化打包工具&#xff0c; 可以将零散的js文件打包到一个js文件中可以使用loader对对模块的源代码进行转换 再打包可以支持载入任何类型的文件有代码拆解能力 2.webpack中有两个重要的概念 loader: loader 让 webpack 能够去处理…

paddla模型转gguf

在使用ollama配置本地模型时&#xff0c;只支持gguf格式的模型&#xff0c;所以我们首先需要把自己的模型转化为bin格式&#xff0c;本文为paddle&#xff0c;onnx&#xff0c;pytorch格式的模型提供说明&#xff0c;safetensors格式比较简单请参考官方文档&#xff0c;或其它教…

Tomcat优化和动静分离

Tomcat优化和动静分离 一、Tomcat优化 Tomcat&#xff1a;自身优化、内核优化和jvm优化 tomcat的并发处理能力不强&#xff0c;大项目一般不使用tomcat作为转发的中间件&#xff08;k8s集群、Python、rubby&#xff09;&#xff0c;小项目会使用&#xff08;内部使用&#x…

Python功能制作之获取CSDN所有发布文章的对应数据

大家好&#xff0c;今天我要分享的是一个实用的Python脚本&#xff0c;它可以帮助你批量获取CSDN博客上所有发布文章的相关数据&#xff0c;并将这些数据保存到Excel文件中。此外&#xff0c;脚本还会为每篇文章获取一个质量分&#xff0c;并将这个分数也记录在Excel中。让我们…

探索IP形象设计:快速掌握设计要点

随着市场竞争的加剧&#xff0c;越来越多的企业开始关注品牌形象的塑造和推广。在品牌形象中&#xff0c;知识产权形象设计是非常重要的方面。在智能和互联网的趋势下&#xff0c;未来的知识产权形象设计可能会更加关注数字和社交网络。通过数字技术和社交媒体平台&#xff0c;…

Nuxt3封装网络请求 useFetch $fetch

前言&#xff1a; 刚接触、搭建Nuxt3项目的过程还是有点懵的&#xff0c;有种摸石头过河的感觉&#xff0c;对于网络请求这块&#xff0c;与之前的Vue3项目有所区别&#xff0c;在Vue项目通常使用axios这个库进行网络请求&#xff0c;但在Nuxt项目并不推荐&#xff0c;因为有内…

SAP SD销售寄售转销售订单简介

前面的几篇文章都演示了寄售模式下的系统操作的步骤和后台相关配置的演示,本文将演示客户寄售库存的消耗。 还是看下下图中的寄售四种的订单类型,我们演示的就是寄售的消耗,同样也可以理解为我们借出的东西转换成了销售订单买给客户的这的场景。 首先还是从创建销售订单开…

【刷题汇总 -- 最长回文子串、买卖股票的最好时机(一)、[NOIP2002 普及组] 过河卒】

C日常刷题积累 今日刷题汇总 - day0101、最长回文子串1.1、题目1.2、思路1.3、程序实现 2、买卖股票的最好时机(一)2.1、题目2.2、思路2.3、程序实现2.4、程序实现 -- 优化 3、[NOIP2002 普及组] 过河卒3.1、题目3.2、思路3.3、程序实现 -- dp 4、题目链接 今日刷题汇总 - day0…

全球首款集成GPT-4o的智能眼镜AirGo Vision:AI眼镜的未来

引言 在人工智能和大模型技术迅猛发展的今天&#xff0c;AI硬件产品逐渐走入人们的生活。继Meta Ray-Ban智能眼镜之后&#xff0c;Solos公司在最近的香港智能眼镜峰会上发布了全球首款集成GPT-4o的智能眼镜AirGo Vision。本文将深入探讨这款AI智能眼镜的功能、技术特点以及其在…

Docker 使用基础(3)—容器

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 4:20 &#x1f504; ◀️ ⏸ …

轻松搭建 VirtualBox + Vagrant + Linux 虚拟机

一、准备工作 首先&#xff0c;我们来了解一下搭建 VirtualBox Vagrant Linux 虚拟机所需的软件准备工作。 VirtualBox 的下载地址&#xff1a;您可以通过访问https://www.virtualbox.org/wiki/Downloads获取适用于您系统的版本。 Vagrant 的下载地址&#xff1a;前往http…

麦克风领夹式的哪个牌子最好,无线领夹麦克风十大品牌

在直播和自媒体行业迅速崛起的今天&#xff0c;无线麦克风因其便携性和实用性成为了视频制作和直播带货中不可或缺的工具。面对市场上从几十元到几千元不等的无线麦克风&#xff0c;作为一位资深直播运营专家&#xff0c;我深知选择合适的设备对于提升直播质量和观众体验的重要…

【简历】南京某大学顶级211硕士:拿offer可能性低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这份简历的背景是南京的一所顶级211的硕士,从学校背景来讲呢,求职目标就是大厂的秋招&#xff0c;但是因为项目描述的亮点比较少&#x…

JavaScript青少年简明教程:为何学习JavaScript及JavaScript简介

JavaScript青少年简明教程&#xff1a;为何学习JavaScript及JavaScript简介 JavaScript最初是为web浏览器&#xff08;前端开发&#xff09;设计的。它可以在所有现代浏览器中运行&#xff0c;包括Chrome, Firefox, Safari, Edge等。 这意味着JavaScript代码可以在任何能运行…