首页 > 其他分享 >猫咪们狂欢

猫咪们狂欢

时间:2024-08-06 19:54:29浏览次数:9  
标签:狂欢 int 猫咪 back 3005 add push n1

  • 考场上感觉就是网络流,可惜建不出模
  • 最大权值闭合子图模型
  • 最小割的本质其实是点的划分,连接两个集合的点的边构成割集;在本题中,这恰好对应了点的选择与否
  • 首先强制将所有“狂欢猫”安排在第一棵树上,简化问题
  • 你希望建立【i和j都选可以推出k】的模型,虽然没有办法直接构建,但你可以让一个虚拟节点同时连向i和j,在最大权值闭合子图模型中,若i和j都被选择,则可以间接推出k一定被选择,否则答案一定不优
点击查看代码
#include <bits/stdc++.h>
using namespace std;
vector<int>a[3005];
vector<int>c[3005];
vector<int>d[3005];
int w[3005],s,t,pr1[3005],pr2[3005];
int q[3005],l[3005];
bool v[3005];
bool b[1005];
void update()
{
	int p=t;
	while(p!=s)
	{
		c[pr1[p]][pr2[p]]-=l[t];
		c[p][d[pr1[p]][pr2[p]]]+=l[t];
		p=pr1[p];
	}
}
int EK()
{
	memset(v,false,sizeof(v));
	q[1]=s;
	l[s]=INT_MAX;
	int L=0,r=1;
	while(L<r)
	{
		L++;
		int n1=q[L];
		for(int i=0;i<a[n1].size();i++)
		{
			if(v[a[n1][i]]==false&&c[n1][i]>0)
			{
				r++;
				q[r]=a[n1][i];
				v[a[n1][i]]=true;
				l[a[n1][i]]=min(l[n1],c[n1][i]);
				pr1[a[n1][i]]=n1;
				pr2[a[n1][i]]=i;
				if(a[n1][i]==t)
				{
					update();
					return l[a[n1][i]];
				}
			}
		}
	}
	return 0;
}
void add(int u,int v,int w)
{
	a[u].push_back(v);
	a[v].push_back(u);
	c[u].push_back(w);
	c[v].push_back(0);
	d[u].push_back(a[v].size()-1);
	d[v].push_back(a[u].size()-1);
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		int n,k;
		cin>>n>>k;
		memset(b,false,sizeof(b));
		memset(w,0,sizeof(w));
		for(int i=0;i<3*n;i++)
		{
			a[i].clear();
			c[i].clear();
			d[i].clear();
		}
		for(int i=1;i<=k;i++)
		{
			int x;
			cin>>x;
			b[x]=true;
		}
		int ans=0;
		for(int i=1;i<n;i++)
		{
			int u,v,W;
			cin>>u>>v>>W;
			if(b[u]&&b[v])
			{
				ans+=W;
				add(n+i,u,INT_MAX);
				add(n+i,v,INT_MAX);
				w[n+i]+=W;
				w[u]-=W;
				w[v]-=W;
			}
		}
		for(int i=1;i<n;i++)
		{
			int u,v,W;
			cin>>u>>v>>W;
			if(b[u]&&b[v])
			{
				add(2*n+i,u,INT_MAX);
				add(2*n+i,v,INT_MAX);
				w[2*n+i]+=W;
			}
		}
		s=0;
		t=3*n;
		for(int i=1;i<3*n;i++)
		{
			if(w[i]>0)
			{
				ans+=w[i];
				add(s,i,w[i]);
			}
			else if(w[i]<0)
			{
				add(i,t,-w[i]);
			}
		}
		int tmp;
		while(tmp=EK())
		{
			ans-=tmp;
		}
		cout<<ans<<endl;
	}
	return 0;
}

标签:狂欢,int,猫咪,back,3005,add,push,n1
From: https://www.cnblogs.com/watersail/p/18345772

相关文章

  • 夏日狂欢,铁威马众多惊喜福利来袭,这很city!
    随着618的尾声悄然落下你是否还在为错失的优惠而扼腕叹息?但请放下遗憾,精彩从未真正落幕。铁威马夏日狂欢季正是为你量身打造的专属福利时刻众多优惠活动接踵而至往下看⬇惊喜福利层出不穷快来参与吧~  以旧换新,焕新升级想要换新机的朋友们,铁威马夏日狂欢季为你提......
  • 养猫必看!猫咪每天需要喝多少水?补水猫罐头大推荐
    作为一名合格的铲屎官,掌握猫咪每天正常的饮水量是十分重要哒!饮水量其实反应着猫咪的身体状况。如果猫咪的饮水量突然大幅变动,那很可能是患上了甲状腺亢进、膀胱感染、糖尿病等疾病,需要赶快送往医院检查!如果你还不知道如何计算猫咪需要的饮水量,也没关系!今天就和大家分享一下我养......
  • 养猫必看!猫咪为什么会软便?四款优质主食罐头大推荐
    铲屎官可能都经历过这样一个令人头疼的问题——猫咪软便。在和20多个宠物营养师交流过后,我想和大家分析一下猫咪软便的原因,以及如何能从根源上预防猫咪频繁软便。一.猫咪软便的原因1.寄生虫的侵扰寄生虫,如绦虫、蛔虫等不速之客会破坏肠道环境,导致猫咪消化不良,从而出现软便......
  • 2024 数据技术嘉年华 | 狂欢嘉年华,好礼送不停!
    狂欢嘉年华,好礼送不停!......
  • 【奶奶看了都会】用 AI做猫咪剧情短片保姆级教程
    大家这段时间在刷短视频的时候,是不是经常会刷到那种猫咪剧情短片,配合喵喵喵......的魔性背景音乐,让人看了非常上头。最近这类视频在抖音、视频号、小红书上非常火,今天小卷就来教大家如何制作。先看视频效果:喵喵与卖火柴的小女孩1.GPT4账号准备我们用到的AI生图工具是ChatGPT4......
  • 娱乐 2023/12/30 《天帝史诗0元享活动》狂欢第二幕自动领高级购物券宝箱
    1.打开活动页面活动直达2.按F12打开浏览器控制台或者Ctrl+Shift+I3.选择console面板4.复制下面代码到控制台再回车functiona(){document.querySelector("#pr2>a").click()letb=setTimeout(()=>{document.querySelector("#commonms......
  • 「大模型摇摇乐」狂欢落幕!盘点那些让你意想不到的应用集锦
    大模型开发不只是枯燥的、墨守成规的,还可以是新鲜刺激的、充满创意火花的!两百多位开发者加入「大模型摇摇乐」,共同享受大模型带来的乐趣!活动详情「大模型摇摇乐」百度飞桨&文心大模型主办,该活动是面向全球AI爱好者的趣味活动,旨在激发开发者的创新意识,提升开发者人工智能创新实践应......
  • Android数据流的狂欢:Channel与Flow
    在Android应用程序的开发中,处理异步数据流是一个常见的需求。为了更好地应对这些需求,Kotlin协程引入了Channel和Flow,它们提供了强大的工具来处理数据流,实现生产者-消费者模式,以及构建响应式应用程序。本文将深入探讨Channel和Flow的内部实现原理、高级使用技巧以及如何在......
  • 2024年春季猫咪冒险游戏《小猫咪大城市》即将横扫PG游戏库!
    美国DouВLeDaggerStudio即将在2024前半年推出一款名为《LittleKitty,BigCity》的猫咪冒险游戏,计划在PCSteam/MicrosoftStore以及XboxOne/XboxSeriesX|S/PGSOFT电子游戏试玩平台上发布。除此之外,他们还计划将游戏移植到NintendoSwitch主机,并预计于2024年春季与其他平......
  • 2023云栖大会:属于开发者的狂欢
    就在10月31日这天,杭州云栖小镇热闹非凡,第八届云栖大会在杭州云栖小镇盛大举行。这次大会以“聚焦大模型与生成式AI”为主题,开发者们齐聚一堂,共同探讨前沿技术趋势,以及如何将这些技术应用到实际业务场景中。当然,卢松松也有幸参与其中,和全球八万多开发者们见证了通义大模型和生成式AI......