百度之星 星球大战
星球大战
公元 4999 年,人
类科学高度发达,绝大部分人都已经移居至浩瀚的宇宙,在上千颗可居住星球上留下了人类的印记。然而,此时人类却分裂成了两个联盟:正义联盟和邪恶联盟。两个联盟之间仇恨难解,时有战争。
现在,正义联盟计划要破坏邪恶联盟的贸易网络,从而影响邪恶联盟的经济状况,为下一次战争作好准备。邪恶联盟由数百颗星球组成,贸易通过星球间的运输航道来完成。一条运输航道是双向的且仅连接两个星球,但两个星球之间可以有多条航道,也可能没有。两个星球之间只要有运输航道直接或间接的相连,它们就可以进行贸易。正义联盟计划破坏邪恶联盟中的一些运输航道,使得邪恶联盟的星球分成两部分,任一部分的星球都不能与另一部分的星球进行贸易。但是为了节省破坏行动所需的开支,正义联盟希望破坏尽量少的运输航道来达成目标。请问正义联盟最少需要破坏多少条运输航道呢?
输入格式:
输入文件包含多组测试数据。每组测试数据第一行为两个整数 N 和 M ( 2 ≤ N ≤500 , 0≤M≤N(N-1)/2 ), N 为邪恶联盟中星球的数量。接下来 M 行,每行三个整数 A 、 B 和 C ( 0 ≤A , B<N , A≠B , C>0 ),表示星球 A 和星球 B 之间有 C 条运输航道。运输航道的总数量不超过 10 8 。
输出格式:
每组测试数据输出一行,包含一个整数,表示需要破坏的运输航道的数量。
如果输入的贸易网络本来就是不连通的,则输出 0 。
输入00样例:
3 3
0 1 1
1 2 1
2 0 1
4 3
0 1 1
1 2 1
2 3 1
8 14
0 1 1
0 2 1
0 3 1
1 2 1
1 3 1
2 3 1
4 5 1
4 6 1
4 7 1
5 6 1
5 7 1
6 7 1
4 0 1
7 3 1
输出样例:
2
1
2
说明:
共有 5 个测试数据集,每个测试数据集为一个输入文件,包含多组测试数据。每个测试数据集从易到难分别为 5 、 10 、 15 、 30 和 40 分,对每个测试数据集分别执行一次程序,每次必须在运行时限 10 秒内结束程序并输出正确的答案才能得分。
所有数据均从标准输入设备( stdin/cin )读入,并写出到标准输出设备 ( stdout/cout )中。
五个测试数据集中输入 N 分别不大于 20 、 50 、 100 、 200 和 500 ,各有 9 组测试数据。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define INF 10000
void main()
{
int m,n;
int i,j;
int b1,b2,b3;
scanf("%d%d",&m,&n);
int **a=(int **)malloc(sizeof(int *)*m);
for(i=0;i<m;i++)
a[i]=(int *)malloc(sizeof(int )*m);
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
if(i==j)
a[i][j]=0;
else
a[i][j]=INF;
}
for(i=0;i<n;i++)
{
scanf("%d%d%d",&b1,&b2,&b3);
a[b1][b2]=b3;
a[b2][b1]=b3;
}
/* for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf("%d ",a[i][j]);
printf("\n");
}*/
int min=1000;
int count=0;
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
{
if(i!=j&&a[i][j]!=INF)
count++;
}
if(count<min)
min=count;
count=0;
}
// printf("%d\n",min);
}
浙公网安备 33010602011771号