洛谷P5683 [CSP-J2019 江西] 道路拆除

news/2024/11/15 4:05:27/文章来源:https://www.cnblogs.com/lazy-ZJY0307/p/18425466

立下flag:今天一定AC这道题!

题目意思:

思路:

然而并没有分。。

输出-1,祈求CCF的施舍(

30% 的数据,有 \(s_1 = s_2\)

求 1 号点到 \(s_1\) 最短路,再计算不需要的路径。
SPFA,启动!

#include<bits/stdc++.h>using namespace std;const int maxn=3010;
const int maxm=3010;int m,n;
int s1,t1,s2,t2;
int en;
int fir[maxn];struct edge{int v;int next;
}ed[maxm*2];void add_edge(int u,int v)
{en++;ed[en].v=v;ed[en].next=fir[u];fir[u]=en;
}queue<int>q;
int dist[maxn];
bool inque[maxn];void spfa(int r)
{memset(dist,0x3f3f3f,sizeof(dist));dist[r]=0;q.push(r);inque[r]=true;while(!q.empty()){int now=q.front();q.pop();for(int i=fir[now];i;i=ed[i].next){int p=ed[i].v;if(dist[p]>dist[now]+1){dist[p]=dist[now]+1;if(inque[p]==false){inque[p]=true;q.push(p);}}}}
}int main()
{cin>>n>>m;for(int i=1;i<=m;i++){int u,v;cin>>u>>v;add_edge(u,v);add_edge(v,u);//无向图 }cin>>s1>>t1>>s2>>t2;spfa(1);cout<<m-dist[s1]<<endl;return 0; 
}

居然多了5分,35分直接拿下!

发现最佳情况一定是这样(如图)

\(a+b+c\) 的值最小的时候,方案是最优的,此时答案就是 \(m-(a+b+c)\)
那么我们就要找出这个 n
先算出 1、s1、s2这三个点分别到其余点的最短路,然后枚举 i 寻找最小值。

#include<bits/stdc++.h>using namespace std;#define int long longconst int maxn=3010;
const int maxm=3010;
int ans=LLONG_MAX;int m,n;
int s1,t1,s2,t2;
int en;
int fir[maxn];struct edge{int v;int next;
}ed[maxm*2];void add_edge(int u,int v)
{en++;ed[en].v=v;ed[en].next=fir[u];fir[u]=en;
}queue<int>q;
int dist[4][maxn];
bool inque[maxn];void spfa(int w,int r)
{for(int i=1;i<=n;i++){dist[w][i]=0x3f3f3f;}dist[w][r]=0;q.push(r);inque[r]=true;while(!q.empty()){int now=q.front();q.pop();for(int i=fir[now];i;i=ed[i].next){int p=ed[i].v;if(dist[w][p]>dist[w][now]+1){dist[w][p]=dist[w][now]+1;if(inque[p]==false){inque[p]=true;q.push(p);}}}}
}signed main()
{cin>>n>>m;for(int i=1;i<=m;i++){int u,v;cin>>u>>v;add_edge(u,v);add_edge(v,u);//无向图 }cin>>s1>>t1>>s2>>t2;spfa(1,1);spfa(2,s1);spfa(3,s2);for(int i=1;i<=n;i++){if(dist[1][i]+dist[2][i]<=t1&&dist[1][i]+dist[3][i]<=t2)ans=min(ans,dist[1][i]+dist[2][i]+dist[3][i]);}if(ans==LLONG_MAX) cout<<-1<<endl;else cout<<m-ans<<endl;return 0; 
}

但是这样居然只有95!?

一定要把inque数组清零!!!!

#include<bits/stdc++.h>using namespace std;#define int long longconst int maxn=3010;
const int maxm=3010;
int ans=LLONG_MAX;int m,n;
int s1,t1,s2,t2;
int en;
int fir[maxn];struct edge{int v;int next;
}ed[maxm*2];void add_edge(int u,int v)
{en++;ed[en].v=v;ed[en].next=fir[u];fir[u]=en;
}queue<int>q;
int dist[4][maxn];
bool inque[maxn];void spfa(int w,int r)
{for(int i=1;i<=n;i++){dist[w][i]=0x3f3f3f;}memset(inque,false,sizeof(inque));dist[w][r]=0;q.push(r);inque[r]=true;while(!q.empty()){int now=q.front();q.pop();for(int i=fir[now];i;i=ed[i].next){int p=ed[i].v;if(dist[w][p]>dist[w][now]+1){dist[w][p]=dist[w][now]+1;if(inque[p]==false){inque[p]=true;q.push(p);}}}}
}signed main()
{cin>>n>>m;for(int i=1;i<=m;i++){int u,v;cin>>u>>v;add_edge(u,v);add_edge(v,u);//无向图 }cin>>s1>>t1>>s2>>t2;spfa(1,1);spfa(2,s1);spfa(3,s2);for(int i=1;i<=n;i++){if(dist[1][i]+dist[2][i]<=t1&&dist[1][i]+dist[3][i]<=t2)ans=min(ans,dist[1][i]+dist[2][i]+dist[3][i]);}if(ans==LLONG_MAX) cout<<-1<<endl;else cout<<m-ans<<endl;return 0; 
}

简单捏~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/801556.html

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

相关文章

golang 项目引入私有仓库包

场景: 当你多个项目,都需要使用一个或者多个方法,那么可以将公共方法,抽成一个包,进行管理(类似Log模块等)。这时候可以将你的包上传到私有的仓库,其他项目引入该包即可。下面来介绍下,如何引用私有仓库的包。 1. 创建一个新的 Git 标签 假设你已经在你的私有 GitLab …

设计模式之——装饰者模式

前言: 装饰者模式是结构性设计模式之一,其在不必改变类文件及不适用继承的情况下,动态的扩展一个对象的功能。它通过创建一个包装对象(即装饰)来包裹真实的对象。 一.定义 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 装饰者模式的…

解决vsc中文乱码

关于vs code使用code runner运行python代码出现中文乱码的解决办法_code runner 运行乱码-CSDN博客 Code Runner插件设置 "set PYTHONIOENCODING=utf8 && python -u"

CSP-S 2024 提高组初赛第一轮初赛试题及答案解析

CSP-S 2024 提高组初赛第一轮初赛试题及答案解析 一、 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 1 在 Linux 系统中,如果你想显示当前工作目录的路径,应该使用哪个命令?( ) A pwd B cd C ls D echo 答案 A 解析 A pwd:这个命令是“prin…

结对项目:四则运算题目生成

这个作业属于哪个课程 22级计科1班这个作业要求在哪里 作业要求这个作业的目标 自动生成小学四则运算题目github项目链接 链接姓名&学号姓名 学号万凯毅 3122004788周彦安 3122004804PSPPSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Plannin…

帝国CMS搬家后无法发文章或者上传图片无法显示?

如果你在搬家后遇到无法发文章或上传图片的问题,通常是因为权限设置不当导致的。以下是一些详细的步骤来解决这些问题: 1. 检查目录权限 无法发文章检查栏目目录及子文件夹权限确保栏目目录及其子文件夹具有适当的权限。 通常需要将这些目录设置为 777 权限。shchmod -R 777 …

WordPress数据库连接失败是最常见的错误情况

WordPress数据库连接失败常见原因及解决方法 官方提示的三种情况数据库名、用户名或密码错误解决方法:检查并确认数据库名称、用户名和密码是否正确无误。数据库主机地址错误解决方法:通常填写localhost即可;如果是远程数据库,请根据主机提供商提供的地址进行填写。数据库未…

打靶记录 SickOS 1.1

https://www.vulnhub.com/entry/sickos-11,132/主机发现端口扫描探测存活主机,136是靶机,因为靶机是我最后添加的 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-22 11:36 CST Nmap scan report for 192.168.75.1 Host is up (0.00038s l…

简单部署Memos

从0到1借助宝塔面板快速部署Memos前言:此处以阿里云为例,利用宝塔面板部署 此文章是部署之后写的,因此有些截图是后补充的,缺少一些执行结果展示和详细步骤的缺失,请根据实际情况做调整准备购买阿里云服务器 ECS着手 创建实例进入阿里云控制台,我的资源→云服务器 ECS; …

发展低空经济,对地理信息技术提出了哪些要求

随着低空经济的快速发展,地理信息技术在其中扮演着越来越重要的角色。低空经济涉及无人机、电动垂直起降(eVTOL)飞行器等航空器的低空飞行活动,其对地理信息技术提出了新的要求和挑战。 1. 高精度定位与导航低空经济中的无人机和eVTOL等航空器需要精确的定位和导航服务。地…

05-信息扫描漏洞探测的工具使用

1、安装并使用Nmap扫描一个地址(本机、VPS、虚拟机环境都可以),提供扫描结果截图在https://nmap.org/ nmap官网下载对应的操作系统版本文件。安装完成后对本机10.0.0.151进行 -A(探测操作系统及版本),-T4(加速扫描),-sS(半连接扫描)。2、安装并使用Xray被动扫描,提供过程…

帝国网站管理系统忘记后台账号和密码怎么办?

如果你忘记了帝国网站管理系统的后台账号和密码,可以通过以下几个步骤来尝试恢复或重置: 情况一:只知道密码忘记了使用数据库管理工具登录phpMyAdmin或其他数据库管理工具。 选择帝国CMS所使用的数据库。 找到用户表,通常为phome_enewsuser,但请注意实际表名可能会根据安装…