https://codeforces.com/gym/100917/problem/F

题目大意:就给你一个无向图,求出所有点属于的最小环大小。

思路:我们给每一个点用dji求出最小路径树,然后对于一颗最小路径树,求环。

和树根构成环只有两种情况:

(1) 树根到其他点有边就能构成环(不是树根直达的点)

(2)不同子树的点有边(树根能直达的子树)

不画图了,你们自己画一下就懂了。

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#include <bitset>
#include <complex>
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define sc second
#define pb push_back
#define all(x) (x).begin(),(x).end()
using namespace std;
typedef long long  ll;
typedef unsigned long long  ull;
typedef pair<ll,ll> pii;
const ll mod=1e9+7;
const ll N =1e6+10;
const double eps = 1e-6;
const double PI=acos(-1);
ll gcd(ll a,ll b){return !b?a:gcd(b,a%b);}
ll re(){ll x;scanf("%lld",&x);return x;}
int dx[8]= {1,0,-1,0,1,1,-1,-1}, dy[8] = {0,1,0,-1,1,-1,1,-1};int ans[311];
int g[311][311];
int p[311];
int n,dis[311],vis[311];
int f(int x){if(p[x]!=x) p[x]=f(p[x]);return p[x];
}
void dij(int u){for(int i=1;i<=n;i++) dis[i]=inf,vis[i]=0,p[i]=i;priority_queue<pii> q;q.push({0,u});dis[u]=0;while(q.size()){pii t=q.top();q.pop();int id=t.sc;int d=-t.fi;if(vis[id]) continue;vis[id]=1;for(int i=1;i<=n;i++){if(g[id][i]>0&&g[id][i]+d<dis[i]){dis[i]=g[id][i]+d;if(id!=u)p[i]=id;q.push({-dis[i],i});}}}//求出最短路径树for(int i=1;i<=n;i++)//求最小环if(p[i]!=i&&g[u][i]>0) ans[u]=min(ans[u],dis[i]+g[u][i]);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i!=u&&j!=u&&g[i][j]>0&&f(i)!=f(j)) ans[u]=min(ans[u],dis[i]+dis[j]+g[i][j]);}}
}
int main()
{FILL(ans,0x3f);n=re();for(int i=1;i<=n;i++){for(int j=1;j<=n;j++) g[i][j]=re();}for(int i=1;i<=n;i++){dij(i);}for(int i=1;i<=n;i++){if(ans[i]<inf) printf("%d\n",ans[i]);else puts("-1");}
}

Gym - 100917F Find the Length-用最小路径树求最小环相关推荐

  1. 《LeetCode力扣练习》第64题 最小路径和 Java

    <LeetCode力扣练习>第64题 最小路径和 Java 一.资源 题目: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为 ...

  2. 三角形最小路径和(动态规划)

    原创公众号:bigsai 欢迎加入力扣打卡 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 题目描述 力扣120原题 给定一个三角形 triangle ,找出自顶向下的最小路径和. ...

  3. LeetCode 64最小路径和65有效数字66加一

    原创公众号:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode打卡 52八皇后Ⅱ&53最大子序和& ...

  4. LeetCode:64. 最小路径和

    题目链接 64. 最小路径和 题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: ...

  5. 算法练习day15——190403(简介、求n!、汉诺塔、打印字符串的子序列、打印字符串的全排列、母牛生小牛、最小路径和、累加和是否达到给定值)

    1. 简介 动态规划是为了优化暴力尝试的. 2. 求n! 2.1 一般思路 public static long getFactorial2(int n) {long result = 1L;for ...

  6. leetcode 64. 最小路径和(递归 / 动态规划解法图解)(Java版)

    题目 leetcode 64. 最小路径和 提示: m == grid.length n == grid[i].length 1 <= m, n <= 200 0 <= grid[i ...

  7. 58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)

    1. 数组去重 题目描述 /*** 有序数组去重* 输出最终的数字个数* 输入:1,2,2* 输出:2* @author Turing**/ 代码 import java.util.*; public ...

  8. 20200225:最小路径和(leetcode64)

    最小路径和 题目 思路与算法 代码实现 时间复杂度分析 题目 思路与算法 这题和之前做过的不同路径Ⅰ,不同路径Ⅱ基本一致,状态方程式也基本一致,没有什么太多的思路,第一种方法就直接暴力枚举所有的节点到 ...

  9. Java 练习 1.三角形最小路径和 2.外出采摘的日本人 3.最大矩形

    三角形最小路径和 给定一个三角形 triangle ,找出自顶向下的最小路径和. 每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 ...

最新文章

  1. logrotate机制和原理
  2. 三、oracle 用户管理一
  3. 干货报告:八大科技领域,280 页,InfoQ《2020 中国技术发展白皮书》开放下载...
  4. string中删除一个元素
  5. ssl1715-计算面积【差积】
  6. 关于Websockets问题:
  7. 区块链 solana TPS吞吐率
  8. 小小方法,问题锦集。
  9. mongodb的初步使用
  10. [06]项目实战-移动端流体布局
  11. Excel在指定范围内匹配/查找文本(MATCH)
  12. 2021中国工业软件上市企业公司排行2021中国智能制造企业排名
  13. Neo4j 第二篇:图形数据库
  14. 乐鑫Esp32学习之旅 22 讨论下程序员 “青春饭” 那些事,分享在esp32实现多种加密算法md5 |AES CBC-ECB| Sha1 | Sha256 等,附带Demo;
  15. python 导入第三方包_Python第三方包的导入
  16. 美中嘉和赴港IPO背后:毛利率大幅下滑,杨建宇控股2家公司均亏损
  17. 从小社会认同到大社会认同:引爆流行的转折点
  18. Codeforces Round #767 (Div. 2)题解
  19. 使用nw.js将vue项目打包为可在xp系统运行的桌面程序
  20. Java String字符串转int数组

热门文章

  1. 傅立叶变换是如何改变我们生活的? ——四个角度告诉你答案
  2. 每日一笑 | 爱的魔力转圈圈~
  3. 耗时6年的DK博物科普巨著,全面提升孩子的认知高度
  4. 想入门平均月薪2.58w人工智能领域?看看BAT的工程师在学什么
  5. 内核中根据inode得到文件名_聊聊DOS操作系统中的文件系统FAT12
  6. java范型_Java知识点总结(Java泛型)
  7. 超详细图解!【MySQL进阶篇】MySQL事务和锁
  8. android工程jrr版本怎么改,ionic3 生成android 如何控制versionCode版本号
  9. Java图形 图像与多媒体基础,十一. 图形、图像与多媒体1.绘图基础
  10. libaio.so.1 mysql_libaio.so.1()(64bit) is needed by MySQL-server