FOJ Problem 2271 X
Accept: 55 Submit: 200
Time Limit: 1500 mSec Memory Limit : 32768
KB
Problem Description
X is a fully prosperous country, especially known for its complicated
transportation networks. But recently, for the sake of better controlling by the
government, the president Fat Brother thinks it’s time to close some roads in
order to make the transportation system more effective.
Country X has N cities, the cities are connected by some undirected roads and
it’s possible to travel from one city to any other city by these roads. Now the
president Fat Brother wants to know that how many roads can be closed at most
such that the distance between any two cities in country X does not change. Note
that the distance between city A and city B is the minimum total length of the
roads you need to travel from A to B.
Input
The first line of the date is an integer T (1 <= T <= 50), which is the
number of the text cases.
Then T cases follow, each case starts with two numbers N, M (1 <= N <=
100, 1 <= M <= 40000) which describe the number of the cities and the
number of the roads in country X. Each case goes with M lines, each line
consists of three integers x, y, s (1 <= x, y <= N, 1 <= s <= 10, x
is not equal to y), which means that there is a road between city x and city y
and the length of it is s. Note that there may be more than one roads between
two cities.
Output
For each case, output the case number first, then output the number of the
roads that could be closed. This number should be as large as possible.
See the sample input and output for more details.
Sample Input
2 3
1 2 1
1 2 1
1 2 2
3 3
1 2 1
2 3 1
1 3 1
Sample Output
Case 2: 0
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
const int N_MAX = + ;
int d[N_MAX][N_MAX];
int dp[N_MAX][N_MAX];
int V, M;//顶点数量,边数
void floyd() {
for (int k = ; k < V; k++)
for (int i = ; i < V; i++)
for (int j = ; j < V; j++)
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);
}
int main() {
int T,cs=;
scanf("%d", &T);
while (T--) {
cs++;
scanf("%d%d", &V, &M);
memset(d, 0x3f, sizeof(d));
for (int i = ; i < V; i++) d[i][i] = ;
int res = ;
for (int i = ; i < M; i++) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
a--, b--;
if (d[a][b] == INF) { d[a][b] = c;}
else {//!!一条路有多条边存在
d[a][b] = min(d[a][b], c);
res++; }
d[b][a] = d[a][b];//!!!!!路径双向
} memcpy(dp, d, sizeof(d));
floyd();
for (int i = ; i < V; i++) {
for (int j = i+; j < V; j++) {//!!!!! if (d[i][j] == INF)continue;//两点没有直接连通路,不存在边不需要判断
if (dp[i][j]<d[i][j]) {
res++;
}
else {//相等,也可能i,j之间可以通过i->k->j的路走,这样就可以删掉直接连通路
for (int k = ; k < V; k++) {
if (k == i || k == j)continue;//!!!!!
if (d[i][j] == dp[i][k] + dp[k][j]) {//!!!!!!
res++;
break;
}
}
}
}
}
printf("Case %d: %d\n",cs,res);
}
return ;
}
FOJ Problem 2271 X的更多相关文章
- FOJ ——Problem 1759 Super A^B mod C
Problem 1759 Super A^B mod C Accept: 1368 Submit: 4639Time Limit: 1000 mSec Memory Limit : 32 ...
- 【Floyd最短路】第七届福建省赛 FZU Problem 2271 X
http://acm.fzu.edu.cn/problem.php?pid=2271 [题意] 给定一个n个点和m条边的无向连通图,问最多可以删去多少条边,使得每两个点之间的距离(最短路长度)不变. ...
- FOJ Problem 1016 无归之室
Problem 1016 无归之室 Accept: 926 Submit: 7502Time Limit: 1000 mSec Memory Limit : 32768 KB Prob ...
- FOJ Problem 1015 土地划分
Problem 1015 土地划分 Accept: 823 Submit: 1956Time Limit: 1000 mSec Memory Limit : 32768 KB Probl ...
- foj Problem 2107 Hua Rong Dao
Problem 2107 Hua Rong Dao Accept: 503 Submit: 1054Time Limit: 1000 mSec Memory Limit : 32768 K ...
- foj Problem 2282 Wand
Problem 2282 Wand Accept: 432 Submit: 1537Time Limit: 1000 mSec Memory Limit : 262144 KB Prob ...
- FOJ Problem 2273 Triangles
Problem 2273 Triangles Accept: 201 Submit: 661Time Limit: 1000 mSec Memory Limit : 262144 KB P ...
- foj Problem 2275 Game
Problem D Game Accept: 145 Submit: 844Time Limit: 1000 mSec Memory Limit : 262144 KB Problem D ...
- foj Problem 2283 Tic-Tac-Toe
Prob ...
随机推荐
- python一周速成学习笔记
目录 一:语法元素 1.注释,变量,空格的使用 2.输入函数,输出函数 3.分支语句,循环语句 4.保留字in,同步赋值 5.import与def以及turtle库 6.eval函数与repr函数 二 ...
- 如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)
在JavaScript里可以用ES6提供的FunctionGenerator这种黑科技来打印非波拉契数列,具体细节参考我这篇文章. 在ABAP里也有很多种方式实现这个需求. 下面这个report分别用 ...
- Codeforces C The Game of Efil (暴力枚举状态)
http://codeforces.com/gym/100650 阅读题,边界的cell的邻居要当成一个环形的来算,时间有8s,状态最多2^16种,所以直接暴力枚举就行了.另外一种做法是逆推. #in ...
- 自己太水了—HDOJ_2212
Problem Description A DFS(digital factorial sum) number is found by summing the factorial of every d ...
- Luogu P4463 [国家集训队] calc
WJMZBMR的题果然放在几年后看来仍然挺神,提出了一种独特的优化DP的方式 首先我们想一个暴力DP,先定下所有数的顺序(比如强制它递增),然后最后乘上\(n!\)种排列方式就是答案了 那么我们容易想 ...
- 优先队列的使用——Expedition
一.题目描述 你需要驾驶一辆卡车行驶L单位距离.最开始时,卡车上有P单位的汽油.卡车每开1单位距离需要消耗1单位的汽油.如果在途中车上的汽油耗尽,卡车就无法继续前行,因而无法到达终点.中途共有N个加油 ...
- Windows server 2012安装oracle11g(32/64位)步骤
Oracle官方下地址: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html以下两网址 ...
- python Object-Oriented Programming
Python 类的成员.成员修饰符.类的特殊成员. Python 类的成员 类的成员可以分为三大类: 字段.方法和属性. #注:所有成员中,只有普通字段的内容保存对象中,即: #根据此类创建了多少对象 ...
- bootstrap历练实例: 导航元素中禁用的链接
对每个 .nav class,如果添加了 .disabled class,则会创建一个灰色的链接,同时禁用了该链接的 :hover 状态, <!DOCTYPE html><html& ...
- shell脚本,计算从0+2+4+6+....100的结果是多少?
[root@localhost wyb]# cat evenjia.sh #!/bin/bash #从0++++...100的结果 i= ` do sum=$(($sum+i)) i=$(($i+)) ...