首页 > 其他分享 >洛谷 P6464 [传智杯 #2 决赛] 传送门

洛谷 P6464 [传智杯 #2 决赛] 传送门

时间:2024-07-09 19:30:35浏览次数:16  
标签:传智杯 洛谷 i1 tiao 传送门 ll j1 int

通过便利每两个点之间的传送门,再便利一次其他点与传送点的路长度,没路的情况是最大值不会考虑,有路就取经过传送门和原本最短路的最小值

/* 台州第一深情 */

include <bits/stdc++.h>

using namespace std;
using i64 = long;
using ll = long long;
typedef pair<int, int> PII;
const int N = 105 + 5;
const int M = 1e6;
ll a[N][N], b[M];
int n, m;
void build()
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (i == j)
{
a[i][j] = 0;
}
else
{
a[i][j] = 1e7;//模板,根据题目定义最大值
}
}
}
}
void floyd()
{
for (int tiao = 1; tiao <= n; tiao++)
{
for (int from = 1; from <= n; from++)
{
for (int to = 1; to <= n; to++)
{
a[from][to] = min(a[from][tiao] + a[tiao][to], a[from][to]);
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
build();
for (int i = 1; i <= m; i++)
{
int from, to, w;
cin >> from >> to >> w;
a[from][to] = w;
a[to][from] = w;//无向图,存双边
}
ll ans = INT_MAX;
floyd();//先确定正常情况下的最小值
for (int i = 1; i < n; i++)
{
for (int j = i + 1; j <= n; j++)//i,j是假设从哪个点到哪个点有传送门
{
ll p = 0;
for (int i1 = 1; i1 < n; i1++)//每确定一个传送门都进行一次floyd,便利查找最小值
{
for (int j1 = i1 + 1; j1 <= n; j1++)
{
if (i1 != i || j1 != j)
{
p += min(a[i1][j1], min(a[i1][i] + a[j][j1], a[i1][j] + a[i][j1]));//便利每个点与传送点是否有路,如果有的话就判断一下经过传送门到目标点是不是会更短
}
}
}
ans = min(ans, p);//取小
}
}
cout << ans << "\n";

return 0;

}

标签:传智杯,洛谷,i1,tiao,传送门,ll,j1,int
From: https://www.cnblogs.com/tzstlove/p/18292611

相关文章

  • [传智杯 #2 决赛] 传送门
    https://www.luogu.com.cn/problem/P6464?contestId=180677传智专修学院里有n栋教学楼,有m条双向通行道路连接这些教学楼,不存在重边和自环。每条道路都有一定的长度,而且所有教学楼之间都可以直接或者间接的通过道路到达。我们可以很容易的求出这些教学楼之间的最短路。为了使......
  • 题解:洛谷 P1890 gcd区间
    题解:洛谷P1890gcd区间标签:线段树,st表,分块,dp题意给定数列\(a\),有\(m\)次询问求区间\([l,r]\)的最大公约数。思路这道题有多种写法,如标签所示。线段树线段树可以维护具有结合性的操作,很明显\(\gcd\)满足。这道题线段树跑的慢是因为无修改操作,自然没有其他\(O(1)......
  • 题解:洛谷 P2678 [NOIP2015 提高组] 跳石头
    题解:洛谷P2678[NOIP2015提高组]跳石头标签:二分,贪心题意给定一个数列,\(a_0=0,a_{N+1}=L\),从其中删除不超过\(M\)个数,使得\(a_i-a_{i-1}\)的最小值最大。思路从最小值最大不难想到二分答案。统计\(a_i-a_j<mid\)的数量\(k\),如果不满足的话说明不删,\(j\getsi\)。......
  • 题解:洛谷 P1843 奶牛晒衣服
    题解:洛谷P1843奶牛晒衣服标签:二分,贪心题意给定一个数列,每秒可以将所有数减\(a\),也可以选择一个数减\(b\),二者可同时进行,求让所有数小于等于\(0\)的最小秒数。思路要求最小的秒数,也就是刚好所有数字小于等于\(0\),且尽量大。这个秒数具有单调性,考虑二分答案。二分的......
  • 洛谷p1449后缀表达式题解
    #include<stdio.h>#include<stdlib.h>#defineMAXSIZE100typedeflongElemType;typedefstruct{ ElemType*base; ElemType*top; intStackSize;}sqStack;voidInitStack(sqStack*s){ s->base=(ElemType*)malloc (MAXSIZE*sizeof(ElemTyp......
  • 【DFS】深度优先搜索 洛谷选数例题讲解
    DFS深搜选数问题看一看题......
  • 洛谷P5726 【深基4.习9】打分——C语言
    本题思路:1.先在for循环中分别求出最大值(max),最小值(min),以及它们的和(s);2.最后将它们的和减去最大值,最小值,然后就可以求平均值了,注意是除以n-2#include<stdio.h>intmain(){  intn;  scanf("%d\n",&n);  ints=0,max=-1000,min=300000;//max要小些,min要的......
  • #贪心#洛谷 3615 如厕计划
    题目传送门分析如果男生数目比女生数目多显然无解,在原队列的基础上考虑调换实际是将男生往前移实际上不满意度就是最后一位女生后移了多少位,记女生为一,男生为负一,运用数学归纳法证明只要后缀最小值不低于负一,那么一定存在一种方案,实际上就是求出后缀最小值,并将其调整至不低......
  • C++题解(3) 信息学奥赛一本通: 1013:温度表达转化 洛谷:B2013 温度表达转化 土豆编程:M
    【题目描述】利用公式 C=5×(F−32)÷9C=5×(F−32)÷9(其中CC表示摄氏温度,FF表示华氏温度)进行计算转化,输入华氏温度FF,输出摄氏温度CC,要求精确到小数点后55位。【输入】输入一行,包含一个实数FF,表示华氏温度。(F≥−459.67)(F≥−459.67)【输出】输出一行,包含一个......
  • 洛谷 P3954 [NOIP2017 普及组] 成绩
    本文由Jzwalliser原创,发布在CSDN平台上,遵循CC4.0BY-SA协议。因此,若需转载/引用本文,请注明作者并附原文链接,且禁止删除/修改本段文字。违者必究,谢谢配合。个人主页:blog.csdn.net/jzwalliser题目洛谷P3954[NOIP2017普及组]成绩[NOIP2017普及组]成绩题目背景......