首页 > 其他分享 >校测 20241015 图论

校测 20241015 图论

时间:2024-10-15 16:33:15浏览次数:1  
标签:20241015 图论 vis int 校测 Note leq Input sum

保龄了!因为图论只自学过最短路

Problem 1. 礼物分配

为了庆祝大佬 \(wxh\) 的生日,众人决定为他准备礼物。现在有 \(n\) 个礼品盒排成一行,从 \(1\) 到 n 编号,每个礼品盒中可能有 \(1\) 个或 \(0\) 个礼品。大佬 \(wxh\) 提出了 \(m\) 个要求,形如“第 \(l[i]\) 到第 \(r[i]\) 个礼品盒当中至少有 \(c[i]\) 个礼品”。现在众人想知道,为了满足这些要求,所需准备的最少礼品数。

Input

第一行两个整数 \(n,m\),接下来 \(m\) 行每行三个整数 \(l[i],r[i],c[i]\)。

Output

一行一个整数代表答案。

Note

对于 30%的数据,\(n,m \leq 10\)。
对于所有数据,\(n\leq1000,m\leq10000,1 \leq l[i],r[i] \leq n,0\leq c[i]\leq r[i]-l[i]+1\)

分析

差分约束。
把题目条件转化为对于前缀和 \(sum[r_i] - sum[l_i-1] \ge c_i\) ,即 \(sum[l_i-1]-sum[r]\le -c_i\) 建出对应边 \((r_i,l_i-1,-c_i)\) ;
注意到前缀和又另一组隐藏性质 \(0\le sum[i+1]-sum[i]\le1\) 建出对应边 \((i+1,i,0) 和 (i,i+1,1)\);
最后再连出从超级源点出发的各点 \((s,i,0)\);
建完图直接SPFA跑最短路,输出 \(sum[n]-sum[0]\) 即可。

AC代码:

#include<bits/stdc++.h>
using namespace std;

inline int read() {
	int f = 1, otto = 0;
	char a = getchar();
	while(!isdigit(a)) {
		if(a == '-') f = -1;
		a = getchar();
	}
	while(isdigit(a)) {
		otto = (otto << 1) + (otto << 3) + (a ^ 48);
		a = getchar();
	}
	return f * otto;
}

const int maxn = 1e3 + 10, maxm = 1e4 + 10;
struct edge{
	int v, nxt, w;
}e[maxm << 1];

int head[maxm], tot = 0;
void add(int u, int v, int w) {
	e[++tot].nxt = head[u];
	head[u] = tot;
	e[tot].v = v;
	e[tot].w = w;
}

queue<int> q;
int s, vis[maxn], d[maxn];
void spfa() {
	memset(d, 0x3f, sizeof d);
	d[s] = 0;
	vis[s] = 1;
	q.push(s);
	while(q.size()) {
		int u = q.front(); q.pop();
		vis[u] = 0;
		for(int i = head[u]; i; i = e[i].nxt) {
			int v = e[i].v, w = e[i].w;
			if(d[u] + w < d[v]) {
				d[v] = d[u] + w;
				if(!vis[v]) q.push(v), vis[v] = 1;
			}
		}
	}
	return;
}

int main() {
	freopen("a.in", "r", stdin);
	freopen("a.out", "w", stdout);
	int n = read(), m = read();
	for(int i = 1; i <= m; i++) {
		int l = read(), r = read(), c = read();
		add(r, l - 1, -c);
	} 
	for(int i = 0; i <= n; i++) {
		add(i + 1, i, 0); add(i, i + 1, 1);
	}
	s = n + 1;
	for(int i = 1; i <= n; i++) add(s, i, 0);
	spfa();
	printf("%d", d[n] - d[0]);
	return 0;
}

Problem 2.

Input

Output

Note

分析

AC代码:


Problem 3.

Input

Output

Note

分析

AC代码:


Problem 4.

Input

Output

Note

分析

AC代码:


标签:20241015,图论,vis,int,校测,Note,leq,Input,sum
From: https://www.cnblogs.com/Ydoc770/p/18467821

相关文章

  • 图论 MST(最小生成树) prim
    #include<bits/stdc++.h>usingnamespacestd;constintP=1e6+7;constintinf=1e9;typedeflonglongll;intmp[1010][1010];intn,m;intd[1010];//从已选点到i的min权值intvis[1010];//选或没选voidprim(){ for(inti=1;i<=n;i++) d[i]=inf......
  • cvpr注意事项和注册流程(2025版)(20241015更新还未开放注册)
    本文章基于现有网上没有cvpr详细版本的一步一步的注册流程进行编写,用于指导自己和方便他人进行注册。接下来将从CVPR2025的重要节点、变更事项、注册流程进行说明重要节点CVPR2025变更的重要事项Duetothedramaticincreaseinthenumberofsubmissionsandthedeterio......
  • NOIP2024集训Day49 图论
    NOIP2024集训Day49图论A.[BZOJ2348中山市选2011]杀人游戏最优决策一定是我们找到一个点,使它能够尽可能到达更多的点,然后我们会发现必须询问的人缩点后就是入度为\(0\)的点。如果剩下了一个人,那么这个人是可以被推出来的。即:入度为\(0\)的点是一定要被询问的,如果存在一......
  • NOIP2024集训Day50 图论
    NOIP2024集训Day50图论A.[JSOI2012]越狱老虎桥先边双缩点,建出边双生成树。在不额外加边的情况下,割掉树边会使子树内部断开;在加入边的情况下,若加入一条\(1-u\)的边,则形成了一个\(1-u\)的环,环无法通过割一条边断开;而连接树上两个节点\((u,v)\)的情况,把图展开后发......
  • NOI提高级 图论算法:单源次短路
    DIJ(单源次短路)-TwoPaths-HDU6181DIJ(单源次短路)-TwoPaths-HDU6181-CSDN博客单源次短路(P2829大逃离)单源次短路(P2829大逃离)-CSDN博客单源次短路算法学习笔记单源次短路算法学习笔记-Wiueh_Plus-博客园次短路及次短路计数次短路及次短路......
  • 如果你在写图论 2 的 I 题,这里有一个实现的比较一般的交互库
    #include<bits/stdc++.h>//交互题什么的最讨厌了usingnamespacestd;usingllt=longlong;usingllf=longdouble;usingull=unsignedlonglong;mt19937rnd(ull(newchar)*ull(newchar));constintN=1e5+3;structGph{ inthd[N],to[N<<1],nt[N<<1],......
  • 【图论】迪杰特斯拉算法
    文章目录迪杰特斯拉算法主要特点基本思想算法步骤示例实现迪杰斯特拉算法基本步骤算法思路总结迪杰特斯拉算法迪杰特斯拉算法是由荷兰计算机科学家艾兹赫尔·迪杰特斯拉(EdsgerW.Dijkstra)在1956年提出的,用于解决单源最短路径问题的经典算法。该算法的目标是从一......
  • CF547D Mike and Fish(图论建模)
    题意二维平面上有\(n\)个点\((x_i,y_i)\),你需要给每个点染色红色或蓝色使得每一行、每一列上红蓝点数差小于等于1。\(n,x_i,y_i\le2\times10^5\)。分析方法一:上下界网络流对所有行和列建点,\(x_i\rightarrowy_i\)连边,流量\([0,1]\),有流量表示染红。源点向行点连边,流量......
  • Day44~45 图论回顾
    P6628[省选联考2020B卷]丁香之路枚举每个终点,先向\(s\)额外加一条边,就等价于求最小的欧拉回路。(根据图的性质,不走重复路一定更优)刚开始的\(m\)条边必定会组成一系列的连通块,我们还要加边使之联通。又要满足无向图欧拉回路的性质。也就是每个点的度数为偶数。你考虑直......
  • 图论
    原来我没学过图论。尝试把普及组+提高组的大部分图论内容重学。定义啥的不写了。OI-Wiki有详细的。图的存储一般来说有3种存图方法:直接存。例如structEdge{inta,b,w;}edges[N];。邻接矩阵。即一个矩阵\(g\),其中\(g_{i,j}\)表示\(i,j\)间的边数。如果......