洛谷题目链接

前言:

这题其实真的不难


回归正题:

我们首先要明白$floyd$的思想,相信你都来做这道水题了,肯定不陌生,简单的手玩后,我们可以发现:

只要有任意一个点只跟非标记点相连的话,是更新不出它到另外的标记点的距离的,并且题目中$k>=2$是很关键的,光说不清楚,举个例子:

$n=5,m=4,k=2$,标记点为$1,5$时:

只需要如下连:

$1-2,1-3,1-4,4-5$,就能够$hack$,为什么呢,我们看到题目中是以标记点为中间点来更新最短距离

那么以$1$为标记点时,能更新出:$2-3,2-4,3-4$的最短距离,而以$5$为标记点时,什么都不能更新出,所以$1-5$的最短距离就不能算出来

那么总结一下连边的规律:

$1$、随便选一个点(下面代码选的是随机的标记点),只跟非标记点相连

$2$、把所有未加入图中的点加入,向除了上面选的点的点连边

$3$、如果边数不满$m$的话,想怎么连就怎么连$qwq$,前提还是不和上面的点相连

那么输出$-1$的情况呢??

$1$、当所有点都是标记点的时候,其实就是一个完整的$floyd$,难道你能$hack$吗,(逃)

$2$、当$m$很大,让你不能够腾出一个点只跟非标记点相连的时候,输出$-1$,具体的话是$(n-1)*(n-2)/2+n-k$,为什么呢?其实是我们要保证一个点只跟非标记点连边,那么连的边数就是$n-k$,那么其他的点随便怎么连,但是最多就是个完全图,也就是$(n-1)*(n-2)/2$了,相加即可

接下来是美滋滋的代码时间~~~

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 307
using namespace std;
int n,m,k,it,it1,line;
bool g[N][N],mark[N],vis[N];
int main()
{
scanf("%d%d%d",&n,&m,&k);
if((k==n)||(m>(n-1)*(n-2)/2+n-k))
{
printf("-1");
return 0;
}
for(int i=1;i<=k;++i)
{
int in;
scanf("%d",&in);
mark[in]=1;
it=in;
}
vis[it]=1;
for(int i=1;i<=n;++i)
g[i][i]=1;
for(int i=1;i<=n;++i)
{
if(i==it||mark[i])
continue;
printf("%d %d\n",i,it);
++line;
vis[i]=1;
g[i][it]=g[it][i]=1;
it1=i;
if(line==m)
return 0;
}
for(int i=1;i<=n;++i)
{
if(line==m)
return 0;
if(vis[i])
continue;
printf("%d %d\n",i,it1);
++line;
g[i][it1]=g[it1][i]=1;
vis[i]=1;
}
for(int i=1;i<=n;++i)
{
if(line==m)
return 0;
if(i==it)
continue;
for(int j=1;j<=n;++j)
{
if(j==it||g[i][j])
continue;
if(line==m)
return 0;
printf("%d %d\n",i,j);
g[i][j]=g[j][i]=1;
++line;
}
}
return 0;
}

  

最新文章

  1. JavaScript(Node.js)+ Selenium自动化测试
  2. 转:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数
  3. 20145229&amp;20145316 《信息安全系统设计基础》 实验二 固件设计
  4. 【C语言】C语言局部变量和全局变量
  5. SSH项目与SSM项目的进入首页的方法
  6. 微软自带的Serialization和Newtonsoft简单测试
  7. Dockerfile指令
  8. 《Cocos2d-x实战(卷Ⅰ):C++开发》
  9. 在.Net Core中使用MongoDB的入门教程(一)
  10. 利用Camera和Matrix实现有趣的卡片效果
  11. JavaScript 中的undefined and null 学习
  12. CF76A.Gift [最小生成树]
  13. Spring MVC工作原理 及注解说明
  14. 解决ant Design dva ajax跨越请求 (status=0)
  15. 20155216 2016-2017-2 《Java程序设计》第二周学习总结
  16. [转]Eclipse 项目转移到Android Studio遇到的问题
  17. leetcode413
  18. #pragma pack(n)对齐格式
  19. JVM内存杂记1
  20. Angular4+NodeJs+MySQL 入门-06 接口配置

热门文章

  1. PAT(B) 1006 换个格式输出整数(Java)
  2. Kafka无法消费?!我的分布式消息服务Kafka却稳如泰山!
  3. Creating a ModelForm without either the &#39;fields&#39; attribute or the &#39;exclude&#39; attribute is prohibited; form ResumeForm needs updating.
  4. Senparc.Weixin+nginx配置之坑 ‘10003 redirect_uri域名与后台不一致’
  5. VBA教程(一)
  6. windows下监控进程的脚本
  7. Uploadify 之使用
  8. vue-cli3 使用雪碧图
  9. 3d转化
  10. git remote 使用总结