每日刷题(二分图,二分查找,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() {TESTsolve();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.mzph.cn/diannao/45101.shtml

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

相关文章

新媒体运营都需要掌握哪些技术?沈阳新媒体运营免费培训

新媒体运营需要掌握的技术包括内容创作、FAB产品介绍法、用户运营、社群运营、活动策划和数据分析。这个岗位在现代社会中的重要性日益突出&#xff0c;随着互联网的发展&#xff0c;新媒体已成为人们获取信息的主要渠道之一&#xff0c;而新媒体运营则是通过各种新媒体平台进行…

数据库系统原理练习 | 作业2-第2章关系数据库(附答案)

整理自博主本科《数据库系统原理》专业课完成的课后作业&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 *文中若存在书写不合理的地方&#xff0c;欢迎各位斧正。 专业课本&#xff1a; 目录 一、选择题 二、填空题 三、简答题 四、关系代数 1.课本p70页&…

hive中reverse函数

目录 前言基本函数介绍实战 前言 reverse函数&#xff0c;是一个常用的字符串处理函数&#xff0c;很多编程语言都有。最近开发中&#xff0c;遇到一个reverse解决的需求&#xff0c;发现自己尚未总结过&#xff0c;遂补上。 基本函数介绍 SELECT reverse(string_column) FR…

虚拟机安装Linux CENTOS 07 部署NET8 踩坑大全

首先下载centos07镜像&#xff0c;建议使用阿里云推荐的地址&#xff1a; https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.59b5f5ad5Nfr0X 其实这里就已经出现第一个坑了 centos 07 /usr/lib64/ 的 libstdc.so只支持到19&#xff1b; GLI…

数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)

当前&#xff0c;业界流行的集中数据湖表格式 Hudi/Iceberg/DeltaLake&#xff0c;和最近出现并且在国内比较火的 Paimon。我们现在看到的很多是针对流处理场景的读写性能测试&#xff0c;那么本篇文章我们将回归到大数据最基础的场景&#xff0c;对海量数据的批处理查询。本文…

Java中的线程同步机制有哪些?

Java中的线程同步机制是一套用于协调线程间的数据访问及活动的机制&#xff0c;该机制用于保障线程安全以及实现这些线程的共同目标。Java平台提供的线程同步机制主要包括以下几个方面&#xff1a; 1. 锁&#xff08;Lock&#xff09; 锁是Java中最基本的线程同步机制之一&am…

飞书、钉钉、企业微信的大模型“三国杀”

文&#xff1a;互联网江湖 作者&#xff1a;刘致呈 曾经在一次内部的周年会上&#xff0c;字节跳动CEO梁汝波曾表示对飞书和火山引擎的研发投入不低于抖音和TikTok。言下之意&#xff0c;飞书在字节内部的重要性比肩抖音。 业务的重要性从时间上也看得出来&#xff0c;要知道…

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

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

C# Winform之propertyGrid控件使用详解和分组设置

PropertyGrid 控件在 WinForms 中是一个非常有用的工具&#xff0c;它允许用户查看和编辑一个对象的属性。这个控件非常适合用于配置对话框或任何需要动态显示对象属性的地方。下面我会详细介绍 PropertyGrid 的使用方法和如何对属性进行分组。 使用详解 1. 添加 PropertyGri…

《昇思25天学习打卡营第18天|onereal》

RNN实现情感分类 概述 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This film…

AI版Siri要明年见,研究表明ChatGPT暂无法取代程序员,Kimi推出浏览器插件

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 根据彭博社记者马克古尔曼的最新消息&#xff0c;苹果公司今年不会推出全新的Apple Intelligence驱动的Siri&#xff0c;该公司计划在明年1月开始测试&#xff0c;并在iOS 18.4中才推出正式版本。 此前…

景联文科技以高质量多模态数据集赋能AI大模型,精准匹配提升模型性能

在人工智能的浪潮中&#xff0c;语料数据如同建筑的基石&#xff0c;其质量、规模和运用策略直接决定了AI模型的表现和应用的广泛性。 景联文科技在AI领域深耕多年&#xff0c;打磨了高质量多模态数据集&#xff0c;致力于为不同训练阶段的算法精准匹配高质量数据资源。 3000万…

STM32中断(NVIC和EXIT)

CM3 内核支持 256 个中断&#xff0c;其中包含了 16 个内核中断和 240个外部中断&#xff0c;并且具有 256 级的可编程中断设置。但STM32 并没有使用CM3内核的全部东西&#xff0c;而是只用了它的一部分。STM32有 76 个中断&#xff0c;包括16 个内核中断和 60 个可屏蔽中断&am…

Dify中的RAG和知识库

一.RAG 基本架构 当用户提问 “美国总统是谁&#xff1f;” 时&#xff0c;系统并不是将问题直接交给大模型来回答&#xff0c;而是先将用户问题在知识库中进行向量搜索&#xff0c;通过语义相似度匹配的方式查询到相关的内容&#xff08;拜登是美国现任第46届总统…&#xff0…

对比多种方法执行命令行命令

在这两种方法中&#xff0c;一种是使用argparse模块来模拟命令行参数的解析&#xff0c;另一种是使用subprocess模块来直接执行一个命令行命令。下面是对两种方法的详细比较&#xff1a; 使用argparse模拟命令行参数 这种方法主要用于在Python脚本内部测试或集成其他使用argp…

深入剖析C++的 “属性“(Attribute specifier sequence)

引言 在阅读开源项目源代码是&#xff0c;发现了一个有趣且特殊的C特性&#xff1a;属性。 属性&#xff08;attribute specifier sequences&#xff09;是在C11标准引入的。在C11之前&#xff0c;编译器特有的扩展被广泛用来提供额外的代码信息。例如&#xff0c;GNU编译器&…

AcWing 3587:连通图 ← dfs(邻接矩阵 or 链式前向星)

【题目来源】https://www.acwing.com/problem/content/3590/【题目描述】 给定一个无向图和其中的所有边&#xff0c;判断这个图是否所有顶点都是连通的。【输入格式】 输入包含若干组数据。 每组数据第一行包含两个整数 n 和 m&#xff0c;表示无向图的点和边数。 接下来 m 行…

Java面试题系列 - 第5天

题目&#xff1a;Java Lambda表达式与Stream API的深度应用 背景说明&#xff1a;Java 8引入了Lambda表达式和Stream API&#xff0c;极大地提升了Java函数式编程的能力&#xff0c;使代码更简洁、更易读。掌握Lambda表达式和Stream API的使用&#xff0c;对于优化数据处理流程…

Qt/C++项目积累: 2.主机监控器 - 2.2 历史功能实现

修订历史&#xff1a; 20240711&#xff1a;初始表设计&#xff0c;采用sqlite 正文&#xff1a; 关于历史数据存储&#xff0c;考虑的是用数据库来完成&#xff0c;目前考虑使用Sqlite和mysql&#xff0c;先用sqlite来实现&#xff0c;设计表过程如下&#xff1a; 机器总览…

白骑士的C++教学进阶篇 2.1 指针与引用

系列目录 上一篇&#xff1a;白骑士的C教学基础篇 1.5 数据结构 指针和引用是C中非常重要的概念&#xff0c;它们提供了强大的功能&#xff0c;使程序员能够直接操作内存&#xff0c;提高程序的效率和灵活性。在本篇博客中&#xff0c;我们将深入探讨指针与引用的基础知识&…