I - Induced Metric Space Gym - 102190I (floyed)

题目链接:

I - Induced Metric Space

 Gym - 102190I

题目大意:首先是T组测试样例,然后给你一个n*n的矩阵,然后a[i][j]代表i到j的距离是a[i][j]。然后-1代表当前的点的距离不知道,让你填空。要求自己到自己距离是0,a[i][j]=a[j][i]。a[i][j]为i到j的最短距离。

具体思路:前面是一堆非法情况的判断。然后floyed求最短路,如果当前的点是固定的值并且还可以松弛,那么就是非法的。注意数据范围

floyed竟然打错了。。

AC代码:

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 # define ll long long
  4 # define LL_inf 1e9
  5 const int maxn = 2e5+100;
  6 const int N = 500+100;
  7 int  a[N][N];
  8 int vis[N][N];
  9 int n,flag;
 10 void floyed()
 11 {
 12     for(int i=1; i<=n; i++)
 13     {
 14         for(int j=1; j<=n; j++)
 15         {
 16             for(int k=1; k<=n; k++)
 17             {
 18                 if(!vis[j][k]&&a[j][k]>a[j][i]+a[i][k])
 19                 {
 20                     flag=0;
 21                 }
 22                 a[j][k]=min(a[j][k],a[j][i]+a[i][k]);
 23             }
 24         }
 25     }
 26 }
 27 int main()
 28 {
 29     int T;
 30     scanf("%d",&T);
 31     while(T--)
 32     {
 33         flag=1;
 34         memset(vis,0,sizeof(vis));
 35         scanf("%d",&n);
 36         for(int i=1; i<=n; i++)
 37         {
 38             for(int j=1; j<=n; j++)
 39             {
 40                 scanf("%d",&a[i][j]);
 41                 if(a[i][j]==-1)
 42                     vis[i][j]=1;
 43             }
 44         }
 45         for(int i=1; i<=n; i++)
 46         {
 47             if(a[i][i]==-1)
 48                 a[i][i]=0,vis[i][i]=0;
 49             if(a[i][i]!=0)
 50             {
 51                 flag=0;
 52                 break;
 53             }
 54         }
 55         for(int i=1; i<=n; i++)
 56         {
 57             for(int j=i; j<=n; j++)
 58             {
 59                 if(a[i][j]==-1&&a[j][i]!=-1)
 60                 {
 61                     a[i][j]=a[j][i];
 62                     vis[i][j]=0;
 63                 }
 64                 if(a[i][j]!=-1&&a[j][i]==-1)
 65                 {
 66                     a[j][i]=a[i][j];
 67                     vis[j][i]=0;
 68                 }
 69                 if(a[i][j]!=a[j][i])
 70                 {
 71                     flag=0;
 72                     break;
 73                 }
 74             }
 75             if(!flag)
 76                 break;
 77         }
 78         if(!flag)
 79             printf("NO\n");
 80         else
 81         {
 82             for(int i=1; i<=n; i++)
 83             {
 84                 for(int j=1; j<=n; j++)
 85                 {
 86                     if(vis[i][j]==0)
 87                         continue;
 88                     a[i][j]=LL_inf;
 89                 }
 90             }
 91             floyed();
 92             for(int i=1; i<=n; i++)
 93             {
 94                 for(int j=1; j<=n; j++)
 95                 {
 96                     if(a[i][j]!=a[j][i])
 97                     {
 98                         flag=0;
 99                         break;
100                     }
101                 }
102                 if(!flag)
103                     break;
104             }
105             if(!flag)
106                 printf("NO\n");
107             else
108             {
109                 printf("YES\n");
110                 for(int i=1; i<=n; i++)
111                 {
112                     for(int j=1; j<=n; j++)
113                     {
114                         if(j==1)
115                             printf("%d",a[i][j]);
116                         else
117                             printf(" %d",a[i][j]);
118                     }
119                     printf("\n");
120                 }
121             }
122         }
123     }
124     return 0;
125 }

原文地址:https://www.cnblogs.com/letlifestop/p/10801756.html

时间: 2024-10-12 19:56:28

I - Induced Metric Space Gym - 102190I (floyed)的相关文章

A Visual Comfort Assessment Metric for Stereoscopic Images(ICIP2015)

针对立体图像的一种视觉舒适度评价准则 调节accommodation相当于单目focus过程,建模为左右视图的联合熵.聚焦vergence相当于双目fusion过程,建模为左右视图的互信息.联合熵和互信息通过从左右视图中提取的视觉基元计算,调节-聚焦冲突表示为互信息与联合熵之比. 正如动眼神经线索,调节是一个单目线索,指的是晶状体形状和厚度的变化(焦距),这使得眼睛focus在特定距离的物体.而聚焦是一个双目线索,指的是眼球的肌肉旋转,这被用来在同一个物体上汇聚两只眼睛.因此调节相当于focus

CodeForces Gym - 100989G(二分)

题目链接:https://vjudge.net/contest/236677#problem/G 题目意思:有m个地方,有k小时,每个地方有a[i]个人.你要进行操作(一个小时可以移动一个人到另一个地方,或者不移动),最后使得m个地方的人数最多值变成最小情况.(就是移动人使每个地方的人接近平均值,就是统计学中方差就小) 思路:求出平均值,因为平均值是不变的,答案一定在平均值和最大值之间,二分就是要找到这个区间,左边临界值就是平均值,右边临界值就是最大值.在与当前最大值maxx二分得平局值mid,

hdu2544最短路(Floyed)

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 37203    Accepted Submission(s): 16182 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最

2016&quot;百度之星&quot; - 初赛(Astar Round2A)1006 Gym Class(HDU5695)——贪心+拓扑排序

分析:首先,利用贪心可知,如果要所有人的分数和最高,需要把序号大的优先放在前面.其次,对于a的前面不能为b,那么只能a在b前面了,那么就建立一条从a到b的边,并且b的入度加1.然后就是拓扑排序了.要分数最高,则把哪些入度为0的点(他们不需要有哪些人一定要在他们前面,最自由)丢进优先队列,然后就可以实现把序号大的尽量放在前面而且满足题意了. 具体见代码: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string

Gym - 100989G (二分法)

There are K hours left before Agent Mahone leaves Amman! Hammouri doesn't like how things are going in the mission and he doesn't want to fail again. Some places have too many students covering them, while other places have only few students. Wheneve

Gym - 100989H (贪心)

After the data structures exam, students lined up in the cafeteria to have a drink and chat about how much they have enjoyed the exam and how good their professors are. Since it was late in the evening, the cashier has already closed the cash registe

GYM 101933A(dp)

要点 \(\sum{w_i} <= 1e8\)是有意味的. 设\(dp[i]\)为至少可以承受重量\(i\)的最大可达高度.转移时可以转移的\(j\)必须满足加上它之后得保证各层不能超重,所以\(dp[j]\)会由\(dp[j + w_i]\)转移过来,且\(j < w_i\). 复杂度\(O(\sum{w_i})\). const int maxn = 1e5 + 5, maxw = 1e8 + 5; int n, d, ans; struct frog { int l, w, h; boo

E - Third-Party Software - 2 Gym - 102215E (贪心)

Pavel is developing another game. To do that, he again needs functions available in a third-party library too famous to be called. There are mm functions numbered from 11to mm, and it is known that the ii-th version of the library contains functions

Angle Beats Gym - 102361A(计算几何)

Angle Beats \[ Time Limit: 4000 ms \quad Memory Limit: 1048576 kB \] 题意 给出 \(n\) 个初始点以及 \(q\) 次询问,每次询问给出一个询问点 \(Q\),求包括 \(Q\) 点的直角三角形有多少个.保证 \(n+q\) 个点都不重复. 思路 对于每次询问,当 \(Q\) 为直角点时,以 \(Q\) 为原点,对 \(n\) 个点做象限极角排序,然后用双指针 \(L\). \(R\) 维护直角三角形的个数. \(L\) 指