首页 > 其他分享 >摧毁 做题记录

摧毁 做题记录

时间:2024-10-21 14:24:29浏览次数:1  
标签:记录 int s1 t1 vis maxn 摧毁 dis

因为边权为 \(1\),所以两条路最多只有一条交集。因为 \(n \le 3000\),所以我们跑出全源最短路,枚举交集的端点,然后计算即可。时间复杂度 \(O(n(n+m))\)。

点击查看代码
int n,m;
int l1,s1,t1,l2,s2,t2;
vector<int>G[maxn];
int dis[maxn][maxn];
bool vis[maxn];
void bfs(int st) {
	m0(vis);
	queue<pair<int,int> >q;
	q.push({st,0});
	while(!q.empty()) {
		auto [u,d]=q.front(); q.pop();
		if(vis[u]) continue;
		vis[u]=1; dis[st][u]=d;
		for(auto v:G[u]) {
			if(!vis[v]) 
				q.push({v,d+1}); 
		}
	}
}
signed main() {
	mem(dis,0x3f);
	in2(n,m);
	For(i,1,n) dis[i][i]=0;
	For(i,1,m) {
		int u,v;
		in2(u,v);
		pb(G[u],v);
		pb(G[v],u);
	}
	in3(s1,t1,l1);
	in3(s2,t2,l2);
//	For(k,1,n) For(i,1,n) For(j,1,n) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
	For(i,1,n) {
		bfs(i);
	}
	int ans=1e9;
	if(dis[s1][t1]<=l1&&dis[s2][t2]<=l2) ans=dis[s1][t1]+dis[s2][t2];
//	For(i,1,n) For(j,1,n) cout<<dis[i][j]<<(j==n?'\n':' ');
	For(i,1,n) For(j,1,n) {
		int d1=dis[i][j]+min(dis[s1][i]+dis[j][t1],dis[s1][j]+dis[i][t1]);
		int d2=dis[i][j]+min(dis[s2][i]+dis[j][t2],dis[s2][j]+dis[i][t2]);
		if(d1<=l1&&d2<=l2&&d1+d2-dis[i][j]<ans) {
			ans=d1+d2-dis[i][j];
//			cout<<d1<<' '<<d2<<' '<<i<<' '<<j<<'\n';
		} 
	}
	cout<<(ans==1e9?-1:m-ans);
}

标签:记录,int,s1,t1,vis,maxn,摧毁,dis
From: https://www.cnblogs.com/CodingGoat/p/18489385

相关文章

  • electron学习记录-学了忘,忘了学,学了还得忘~
    1、序言:光快速入门就搞了快一下午,先是遇到npm证书过期,然后npmconfigsetstrict-sslfalse后,又报各种错,总之重装npm(不是重装node是npminstall-gnpm)+淘宝镜像+ssl:false解决了electron的node_moudles,我一直安装不上,现在都是;最终还是我从其他项目中copy了出来;除node_modul......
  • 序列 做题记录
    当\(k=0\)时,所有的数奇偶性都一样,所以答案为\(n!\)。否则有\(\lceil\frac{n}{2}\rceil\)个数是一个奇偶性的,另外\(\lfloor\frac{n}{2}\rfloor\)个数是另一个奇偶性的。如果\(\lceil\frac{n}{2}\rceil=\lfloor\frac{n}{2}\rfloor\),那么两种数可以交换,答案为\(2x!......
  • 2024 Noip 做题记录(五)
    \(\text{ByDaiRuiChen007}\)Round#17-2024.10.8A.[ARC135D]SquareProblemLink题目大意给定\(n\timesm\)矩阵,每次操作可以把\(2\times2\)子矩形中的每个元素\(\pm1\),若干次操作后最小化所有元素的绝对值和,给出构造。数据范围:\(n,m\le500\)。思路分析......
  • 苍穹外卖--开发记录day06
    文章苍穹外卖day06一:店铺营业状态设置二:httpclient三:微信小程序开发1:介绍2:准备工作3:入门案例四:微信登录功能总结苍穹外卖day06一:店铺营业状态设置外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传因为我们店铺的营业状态就两个值,一个是1一个......
  • 记录项目中遇见的几个常见异常
    org.springframework.beans.factory.BeanCreationException&&java.lang.IllegalStateExceptionCausedby:org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'requestMappingHandlerAdapter'definedinclass......
  • openwifi编译步骤记录
    这边还是简单记一下步骤1、首先是下载openwifi-hwgitclone--recursivehttps://github.com/open-sdr/openwifi-hw2、配置vivado环境变量source/tools/Xilinx/Vivado/2021.1/settings64.sh3、在.bashrc里面配置加一些变量exportXILINX_DIR=/tools/XilinxexportBOARD_NA......
  • openwifi学习-日程记录(全)
    网址:https://github.com/open-sdr/openwifiOpenwifi:openwifi与linux的驱动部分源码和linux系统。Openwifi-hw:openwifi的FPGA部分源码,是硬件部分,也是lowmac部分。Openofdm:openwifi的基带部分源码,也是运行在FPGA中,最终集成到openwif-hw项目中,也算是openwif-hw的一部分(ip),在这里单......
  • 2024 ICPC Asia Taiwan Online Programming Contest题解记录
    比赛链接:https://codeforces.com/gym/105383/problemA.AnimalFarm找个最大pig,然后所有比他小的其他种类生物一直加就好了#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constllmod=1e9+7;llksm(llx,lly){ llans=1; while(y) { if(y&1)......
  • 【学校训练记录】10月个人训练赛4个人题解
    A:要使s,t相等只要互相删除对方没有的字母即可,即找到a-z字母拥有最少的#include<bits/stdc++.h>#defineendl"\n"#defineintlonglongusingnamespacestd;strings1,s2;inta1[30],a2[30];voidsolve(){ cin>>s1>>s2; for(inti=0;i<s1.size(......
  • C语言小白 记录自己对一些概念的理解 若有错误 多包涵 若能指正 万分感激
    当你想将输入和判断输入一起做时可以用while((数组名[i]=getchar())!='\n')记得拿括号括起来辅助在写!=CG平台使用输入重定向输入测试数据,需要使用(ch=getchar())!=EOF判断字符串输入结束,如果使用(ch=getchar())!='\n'上传到CG平台后可能会超时。写oj的时候如......