http://acm.fzu.edu.cn/problem.php?pid=2271

【题意】

  • 给定一个n个点和m条边的无向连通图,问最多可以删去多少条边,使得每两个点之间的距离(最短路长度)不变。

【思路】

  • 首先对于多重边可以只保留最短的边,剩下的都删去
  • 跑一次Floyd,用vis数组记录哪些边可以被松弛(注意map[i][k]+map[k][j]==map[i][j]时,i-j这条边如果在原图,也可以被删去)
  • 最后遍历一下所有的原图的边,可以被松弛的就可以被删去

【Accepted】

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std; int n,m;
const int maxn=1e2+;
const int maxm=4e4+;
const int inf=0x3f3f3f3f;
bool vis[maxn][maxn];
int map[maxn][maxn];
int mp[maxn][maxn]; void Floyd()
{
for(int k=;k<=n;k++)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(i==j)
{
continue;
}
if(map[i][k]<inf&&map[k][j]<inf&&map[i][k]+map[k][j]<=map[i][j])
{
map[j][i]=map[i][j]=map[i][k]+map[k][j];
//说明这条边可以被别代替而不影响最短路,那么如果这条边是原来存在的一条边,我们就可以删去 它
vis[j][i]=vis[i][j]=true;
}
}
}
}
}
int main()
{
int T;
scanf("%d",&T);
int cas=;
while(T--)
{
memset(vis,false,sizeof(vis));
memset(map,inf,sizeof(map));
scanf("%d%d",&n,&m);
int ans=;
for(int i=;i<=m;i++)
{
int u,v,c;
scanf("%d%d%d",&u,&v,&c);
if(map[u][v]<inf)
{
ans++;
}
map[u][v]=map[v][u]=min(map[u][v],c);
}
memcpy(mp,map,sizeof(mp));
Floyd();
for(int i=;i<=n;i++)
{
for(int k=i+;k<=n;k++)
{
if(mp[i][k]<inf&&vis[i][k])
{
ans++;
}
}
}
printf("Case %d: %d\n",++cas,ans);
}
return ;
}

Floyd

【Floyd最短路】第七届福建省赛 FZU Problem 2271 X的更多相关文章

  1. 第七届河南省赛10403: D.山区修路(dp)

    10403: D.山区修路 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 69  Solved: 23 [Submit][Status][Web Bo ...

  2. 第七届河南省赛10402: C.机器人(扩展欧几里德)

    10402: C.机器人 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 53  Solved: 19 [Submit][Status][Web Boa ...

  3. 第七届河南省赛G.Code the Tree(拓扑排序+模拟)

    G.Code the Tree Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 35  Solved: 18 [Submit][Status][Web ...

  4. 第七届河南省赛B.海岛争霸(并差集)

    B.海岛争霸 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 130  Solved: 48 [Submit][Status][Web Board] D ...

  5. 第七届河南省赛A.物资调度(dfs)

    10401: A.物资调度 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 95  Solved: 54 [Submit][Status][Web Bo ...

  6. 第七届河南省赛H.Rectangles(lis)

    10396: H.Rectangles Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 229  Solved: 33 [Submit][Status] ...

  7. 第七届河南省赛F.Turing equation(模拟)

    10399: F.Turing equation Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 151  Solved: 84 [Submit][St ...

  8. 山东省第七届省赛 D题:Swiss-system tournament(归并排序)

    Description A Swiss-system tournament is a tournament which uses a non-elimination format. The first ...

  9. poj 2567 Code the Tree 河南第七届省赛

    Code the Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2350   Accepted: 906 Desc ...

随机推荐

  1. Vue checkbox默认值改变

    <label><input  v-bind:true-value="1" v-bind:false-value="0" type=" ...

  2. SQL Server 2008还原数据库的具体方法

    俗话说“好记性不如烂笔头”,在相隔较长的时间段内,每次还原客户的数据库都记不清完全的步骤,为此mark一下. SQL Server 2008一般默认备份的文件格式是bak,即后缀名为.bak.bak文 ...

  3. 801硬件检测工具DragonHD的使用

    801硬件检测工具DragonHD的使用 2018/11/28 13:39 版本:V1.0 开发板:SC3817R 1.客户要认证器件,使用了全志官方的工具:DragonHD.exe 打开之后可以见用 ...

  4. Android性能分析工具Profile GPU rendering详细介绍

    如何在一个应用中追踪和定位性能问题,甚至在没有它的源代码的情况下?? “Profile GPU rendering”(GPU渲染分析),一款Android4.1所引入的工具.你可以在“设置”应用的“开 ...

  5. Android获取声音长度

    代码 MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever(); metaRetriever.setDataSource( ...

  6. HALCON算子1

    https://blog.csdn.net/think_fast/article/details/7011364 待验证学习

  7. 解决VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号

    解决VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号 在设置中把"vetur.format.defaultFormatter.js": " ...

  8. CentOS6 自己动手搭建开放NTP服务器

    第一步: 1. 安装NTP服务程序: [root@host ~]# rpm -qa | grep ntp #查询是否安装ntp服务程序 [root@host ~]# yum install -y nt ...

  9. 筛选法 || POJ 1356 Prime Land

    英文题读不懂题==质数幂的形式给你一个数 把它减一再用质数幂的形式表示出来 *解法:质数从小到大模拟除一遍,输入有点别扭 #include <iostream> #include < ...

  10. 并发3-Volatile

    Volatile关键字实现原理 1.认识volatile关键字 程序举例 用一个线程读数据,一个线程改数据 存在数据的不一致性 2.机器硬件CPU与JMM (1)CPU Cache模 (2)CPU缓存 ...