L2-044 大众情人

L2-044 大众情人
用Floyd求出所有人的最短路径存入 a[ i ][ j ]
求出每个女性,每个男性对她的最近距离的最远距离存入c[ i ]
输出女性b[ i ]的最小值的女性编号
同理输出男性编号

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
const int N=510,MOD=510000000;
int a[N][N],b[N],c[N];//c[N]存性别 
int main()
{
	int i,j,k,n,flag;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			a[i][j]=MOD;//初始化距离必须大于500*1000000 
	for(i=1;i<=n;i++)
	{
		char c1;
		getchar();
		scanf("%c %d",&c1,&k);
		if(c1=='F') b[i]=1;//b[i]==1是男性 
		if(k!=0)
		{
			while(k--)
			{
				int a1,a2;
				scanf("%d:%d",&a1,&a2);
				a[i][a1]=a2;//存入距离 
			}
		}
	}
	for(k=1;k<=n;k++)
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				if(a[i][j]>a[i][k]+a[k][j]) a[i][j]=a[i][k]+a[k][j];
	for(i=1;i<=n;i++)
	{
		c[i]=0;
		for(j=1;j<=n;j++)
		{
			if(b[i]==b[j]) continue;
			c[i]=max(c[i],a[j][i]);//c[i]存异性对他的最远距离 
		}
	}
	int man,wom;
	man=wom=MOD;//初始化 
	for(i=1;i<=n;i++)
	{
		if(b[i]) man=min(man,c[i]);//男
		else wom=min(wom,c[i]);//女
	}
	flag=1;
	for(i=1;i<=n;i++)
	{
		if(b[i]==0) continue;
		if(c[i]==man&&flag) printf("%d",i),flag--;//输出格式 
		else if(c[i]==man) printf(" %d",i);
	}
	printf("\n");
	flag=1;
	for(i=1;i<=n;i++)
	{
		if(b[i]) continue;
		if(c[i]==wom&&flag) printf("%d",i),flag--;//输出格式 
		else if(c[i]==wom) printf(" %d",i);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值