记录编号 317186 评测结果 AAAAAAAAAA
题目名称 城市规划 最终得分 100
用户昵称 GravatarLOSER 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2016-10-07 19:15:51 内存使用 0.00 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 110
#define maxm 10010
int n,dis[maxn][maxn],num[maxn][maxn],w[maxn][maxn];
bool used[maxn][maxn];
int MY(){
	freopen("cityroad.in","r",stdin); freopen("cityroad.out","w",stdout);
	scanf("%d",&n);
	memset(dis,0x3f,sizeof(dis));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			int x; scanf("%d",&x);
			if(x>0){
				dis[i][j]=x;
				num[i][j]=1; w[i][j]=x;
			}	
			if(i==j){
				dis[i][j]=0;
				w[i][j]=0;
			}
		}	
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(i==j||k==j||i==k)continue;
				if(dis[i][j]>dis[i][k]+dis[k][j]){
					dis[i][j]=dis[i][k]+dis[k][j];	
					num[i][j]=num[i][k]*num[k][j];
				}
				else{if(dis[i][j]==dis[i][k]+dis[k][j])
					num[i][j]+=num[i][k]*num[k][j];
				}
			}	
		}
	}
	int sum=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(w[i][j]==dis[i][j] && num[i][j]==1)used[i][j]=1,sum+=w[i][j];
		}	
	}
	printf("%d\n",sum/2);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(used[i][j])printf("1 ");
			else printf("0 ");
		}	printf("\n");
	}
	getchar(); getchar();	
}
int YOU=MY();
int main(){;}