首页 > 其他分享 >2024 CCPC 网赛题解

2024 CCPC 网赛题解

时间:2024-09-18 12:37:23浏览次数:9  
标签:Cur Dep 题解 网赛 Next 2024 MAXN include LL

G

最大流

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAXN 205
#define INF 0x3f3f3f3f3f3f3f3f
#define LL long long
#define Int register int
using namespace std;
inline void read(LL &x)
{
	x = 0;
	LL f = 1;
	char s = getchar();
	while (s < '0' || s > '9')
	{
		if (s == '-')
			f = -1;
		s = getchar();
	}
	while (s >= '0' && s <= '9')
	{
		x = (x << 3) + (x << 1) + (s ^ 48);
		s = getchar();
	}
	x *= f;
}
struct node
{
	LL v, w, Id;
	node(){}
	node(LL V,LL W,LL ID)
	{
		v = V;
		w = W;
		Id = ID;
	}
};
inline LL Min(LL x,LL y)
{
	return x < y ? x : y;
}
LL n, m, s, t, MaxFlow;
vector<node> G[MAXN];
LL Dep[MAXN], Cur[MAXN];
bool Bfs()
{
	memset(Dep, -1, sizeof Dep);
	queue<LL> Q;
	Q.push( s );
	Dep[s] = 0;
	while (! Q.empty())
	{
		LL x = Q.front();
		Q.pop();
		for (Int i = 0; i < G[x].size(); ++ i)
		{
			LL to = G[x][i].v;
			if (Dep[to] == -1 && G[x][i].w > 0)
			{
				Dep[to] = Dep[x] + 1;
				Q.push( to );
			}
		}
	}
	memset(Cur, 0, sizeof Cur);
	return (Dep[t] != -1);
}
LL Dfs(LL x,LL Limit)
{
	if (x == t)
		return Limit;
	for (Int i = Cur[x]; i < G[x].size(); ++ i)
	{
		Cur[x] = i;
		LL to = G[x][i].v;
		if (Dep[to] == Dep[x] + 1 && G[x][i].w > 0)
		{
			LL Next = Dfs(to, Min(Limit, G[x][i].w));
			if ( Next )
			{
				G[x][i].w -= Next;
				G[to][G[x][i].Id].w += Next;
				return Next;
			}
			else Dep[to] = -1;
		}
	}
	return 0;
}
void Dinic()
{
	LL Flow;
	while ( Bfs() )
		while(Flow = Dfs(s, INF))
			MaxFlow += Flow;	
}
LL a[MAXN], V[MAXN], x[MAXN], y[MAXN], W[MAXN];
int main()
{
	LL n, m;
	read( n ); read( m );
	for (Int i = 1; i <= n; ++ i)
	{
		read( a[i] );
		read( V[i] );
	}
	LL Sum_1 = 0, Sum = 0;
	for (Int i = 1; i <= m; ++ i)
	{
		read( x[i] );
		read( y[i] );
		read( W[i] );
		if (x[i] == 1 || y[i] == 1)
			Sum_1 += W[i];
		Sum += W[i];
	}
	G[s].push_back(node(1, Min(Sum_1, a[1] - V[1]), 0));
	G[1].push_back(node(s, 0, 0));
	for (Int i = 2; i <= n; ++ i)
	{
		G[s].push_back(node(i, Min(a[i], Min(a[1], Sum_1 + V[1]) - 1) - V[i], 0));
		G[i].push_back(node(s, 0, i - 1));
	}
	for (Int i = 1; i <= m; ++ i)
	{
		LL Cuis = n + i;
		if (x[i] == y[i])
		{
			int InvCuis = G[x[i]].size();
			G[x[i]].push_back(node(Cuis, INF, 0));
			G[Cuis].push_back(node(x[i], 0, InvCuis));
			continue;
		}
		int InvCuis_x = G[x[i]].size(), InvCuis_y = G[y[i]].size();
		G[x[i]].push_back(node(Cuis, INF, 0));
		G[Cuis].push_back(node(x[i], 0, InvCuis_x));
		G[y[i]].push_back(node(Cuis, INF, 1));
		G[Cuis].push_back(node(y[i], 0, InvCuis_y));
	}
	t = n + m + 1;
	for (Int i = 1; i <= m; ++ i)
	{
		int Invx = i - 1, Invt = G[n + i].size();
		G[n + i].push_back(node(t, W[i], Invx));
		G[t].push_back(node(n + i, 0, Invt));
	}
	Dinic();
	// printf("%lld", MaxFlow);
	if (MaxFlow == Sum)
		printf("YES");
	else printf("NO");
	return 0;
}

标签:Cur,Dep,题解,网赛,Next,2024,MAXN,include,LL
From: https://www.cnblogs.com/aaplloo/p/18418243

相关文章

  • GEE 案例:利用2001-2024年的MODIS数据长时序ndvi指数归一化后的结果分析
    目录简介指数数据代码结果简介利用2001-2024年的MODIS数据长时序ndvi指数归一化后的结果分析,并加载时序图。指数NDVI指数(NormalizedDifferenceVegetationIndex)是用来评估地表植被覆盖度和健康程度的指数。它通过计算红光和近红外光反射率的差异来衡量植被的光合......
  • 20240918_114105 mysql 认识索引
    关于索引MySQL的索引是数据库管理系统中用于提高数据检索效率的一种数据结构。MySQL支持多种类型的索引,每种索引都有其特定的用途和优化方式。以下是MySQL中常见的几种索引类型:1.主键索引(PrimaryKeyIndex)定义:主键索引是一种特殊的唯一索引,它不允许有NULL值,且表中每一行数据......
  • 海南2024下半年软考准考证打印时间11月4日开始
    根据2024下半年海南软考考务通知的说明,2024下半年海南软考准考证打印相关事项如下:一、2024下半年海南软考准考证打印时间2024年11月4日-11月12日。二、2024下半年海南软考准考证打印入口网址海南2024年下半年软考准考证打印入口:中国计算机技术职业资格网(https://www.ruankao.org.......
  • 2024.9.18训练记录
    订正昨天早上的模拟赛T1还没做,dp写法好像要记录什么的感觉好麻烦T2考试没做出来,其实是挺裸的dp状态记pair<int,int>\(f[i][j][k]\)表示前\(i\)个物品,拉出来\(j\)个\(1\),\(k\)个\(2\)所需要的\({背包数,最后一个背包剩的空间}\)。可以分讨最后这一位是否被拉出......
  • 职场人该如何学习使用AI大模型,都2024年还不会用AI办公的你真的out了!
    【写在开篇:这是一篇针对非技术背景的职场人,学习和使用AI大模型的完全攻略。】非技术背景的职场人想要学习和使用AI大模型,可以遵循以下步骤:1.基础学习:首先,需要掌握人工智能的基础知识,包括但不限于机器学习、深度学习等领域。可以通过阅读《ArtificialIntelligence:AMod......
  • 江西2024下半年软考准考证打印时间11月4日9点后开始
    根据2024下半年江西软考考务通知的说明,2024下半年江西软考准考证打印相关事项如下:一、2024下半年江西软考准考证打印时间2024年11月4日9点-11月12日8点30分。二、2024下半年江西软考准考证打印入口网址江西2024年下半年软考准考证打印入口:中国计算机技术职业资格网(https://www.r......
  • 山东2024下半年软考准考证打印时间11月5日9点后开始
    根据2024下半年山东软考考务通知的说明,2024下半年山东软考准考证打印相关事项如下:一、2024下半年山东软考准考证打印时间2024年11月5日9:00。二、2024下半年山东软考准考证打印入口网址山东2024年下半年软考准考证打印入口:中国计算机技术职业资格网(https://www.ruankao.org.cn/)......
  • 【视频教程】手把手AppWizard轻松制作一个emWin滑动主界面控制框架,任意跳转控制(2024-0
    现在的新版AppWizard已经比较好用,用户可以轻松的创建各种项目常规界面。比如早期创建一个支持滑动的主界面框架,并且可以跳转各种子界面,仅仅界面布局和各种图片格式转换都要花不少时间,而现在使用AppWizard,可以说轻轻松松,毫不费力。用户唯一要做的就是根据自己的芯片性能做一定的速度......
  • 河南2024下半年软考准考证打印时间11月2日开始
    根据2024下半年河南软考考务通知的说明,2024下半年河南软考准考证打印相关事项如下:一、2024下半年河南软考准考证打印时间考前一周。二、2024下半年河南软考准考证打印入口网址河南2024年下半年软考准考证打印入口:中国计算机技术职业资格网(https://www.ruankao.org.cn/)。点击进入......
  • 实操触发器的使用 mysql 20240918_102020
    需求新建日志表用于记录老师表的数据化情况起个名字teacher_log需要的列idoperationmsg建老师日志表CREATETABLEteacher_log( idINTPRIMARYKEYAUTO_INCREMENT, operationVARCHAR(11)NOTNULL, msgVARCHAR(200)NOTNULL);定义添加触发器如果往老师表tea......