首页 > 其他分享 >CF350E Wrong Floyd

CF350E Wrong Floyd

时间:2023-10-18 20:34:41浏览次数:38  
标签:typedef int 关键点 long Wrong Floyd CF350E include define

什么一眼构造题

首先要卡Floyd的关键就是存在某两个点\(x,y\),满足这两个点之间的所有最短路经过的点中(除\(x,y\)本身)至少有一个非关键点

因此很容易想到如下构造法,先随便找一个关键点\(K\),然后把所有非关键点和\(K\)连边(当然如果所有点都是关键点就显然无解)

接下来先随便连边保证图连通(刚开始没看到这条,以为方法假了),然后再随便连边把边数卡到\(m\)条即可

注意在任何时候都不能让\(K\)和其它点连边,然后算一下这样构造的边数上界为\(\frac{(n-1)\times (n-2)}{2}+n-k\),当\(m\)超过这个值是就无解

#include<cstdio>
#include<iostream>
#include<utility>
#include<vector>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<set>
#include<array>
#include<random>
#include<bitset>
#include<ctime>
#include<limits.h>
#include<assert.h>
#include<unordered_set>
#include<unordered_map>
#define RI register int
#define CI const int&
#define mp make_pair
#define fi first
#define se second
#define Tp template <typename T>
using namespace std;
typedef long long LL;
typedef long double LDB;
typedef unsigned long long u64;
typedef __int128 i128;
typedef pair <int,int> pi;
typedef vector <int> VI;
typedef array <int,3> tri;
const int N=305;
int n,m,k,a[N],vis[N],ext[N],G[N][N];
int main()
{
	//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
	RI i,j; for (scanf("%d%d%d",&n,&m,&k),i=1;i<=k;++i) scanf("%d",&a[i]),vis[a[i]]=1;
	if (k==n||1LL*(n-1)*(n-2)/2LL+n-k<m) return puts("-1"),0;
	int pos; for (ext[a[1]]=i=1;i<=n;++i)
	if (!vis[i]) printf("%d %d\n",a[1],i),G[a[1]][i]=G[i][a[1]]=ext[i]=1,--m,pos=i;
	for (i=1;i<=n;++i) if (!ext[i])
	printf("%d %d\n",pos,i),G[pos][i]=G[i][pos]=1,--m;
	for (i=1;i<=n&&m;++i) if (i!=a[1])
	for (j=i+1;j<=n&&m;++j) if (j!=a[1])
	if (!G[i][j]) printf("%d %d\n",i,j),G[i][j]=G[j][i]=1,--m;
	return 0;
}

标签:typedef,int,关键点,long,Wrong,Floyd,CF350E,include,define
From: https://www.cnblogs.com/cjjsb/p/17773257.html

相关文章

  • 搜索与图论2.2-Floyd算法
    一、简述\(Floyd\)算法是一种可以快速求解图上所有顶点之间最短路径的算法。\(Bellman-Ford\)和\(Dijkstra\)算法求解的都是从一个起始点开始的最短路。如果想要求解图中所有顶点之间的最短路,就需要枚举每个点做为起点,这样十分低效。\(Floyd\)算法(也称\(Floyd-Warshall\)......
  • Exception in thread "main" java.security.InvalidKeyException: Wrong key size问题
    问题描述在Java里面使用DES加密算法,然后就爆出这个错误:问题解决换用了另外一种加密解密的函数:SecretKeySpec;即将原来的这种:换成了这种:我是觉得使用DES加密算法时,它一直显示key的字节长度不对,就想着换一种表述方式,又看到了别的友友的经验分享,就换成这样试了试(直接放进mai......
  • Floyd 警示后人
    遍历的中转点一定要在最外层遍历!!!不然就会错误的代码↓ for(inti=1;i<=n;++i){ for(intj=1;j<=n;++j){ if(i==j)continue; for(intk=1;k<=n;++k){ if(i==k||j==k)continue; if(mp[i][k]+mp[k][j]<mp[i][j]) mp[i][j]=mp[i][k]+mp[k][j]; } } }......
  • 弗洛伊德(Floyd's)算法—解决最短路径经典算法
    弗洛伊德算法(Floyd'salgorithm)是一种用于解决图中最短路径问题的经典算法。由美国计算机科学家罗伯特·弗洛伊德于1962年提出,该算法通过动态规划的思想,在图中寻找任意两个节点之间的最短路径,具有广泛的应用。本文将详细介绍弗洛伊德算法的原理、实现细节以及应用案例。四、复杂度......
  • 更新wsl,docker无法启动wrong fs type, bad option, bad superblock on cgroup, missi
    PSC:\Users\xxxx>wsl-vWSL版本:2.0.0.0内核版本:5.15.123.1-1WSLg版本:1.0.57MSRDC版本:1.2.4485Direct3D版本:1.608.2-61064218DXCore版本:10.0.25880.1000-230602-1350.mainWindows版本:10.0.22000.2295sudoservicedockerstartmount:/sys/fs/cgroup/cpuset:wron......
  • 最短路之Floyd(医院设置)
    题意题目链接:https://www.luogu.com.cn/problem/P1364给一个二叉树,每个结点有一个值,这个值代表这个结点(即城市)有多少人,然后需要在这些结点中选出一个结点作为医院,问选哪个结点得到的距离和最小。距离和为人数乘以路径长度。思路用最短路,就是先求出每两个点之间的最短......
  • Redis - 出现ERROR:WRONGTYPE Operation against a key holding the wrong kind of val
    原因:用的方法与redis服务器中存储数据的类型存在冲突。比如:有一个key的数据存储的是list类型的,但使用redis执行数据操作的时候却使用了非list的操作方法。 对一个Redis键执行不兼容的操作,这个错误通常发生在以下情况:1、类型不匹配:试图执行的操作与键存储的数据类型不匹配。例......
  • D. More Wrong 交互 思维 逆序对
     题意:这是一道交互题,它手上有个1到n的排列,但你不知道。每次询问你可选择lr,它会告诉你lr这个区间上的逆序对的数量,而这次询问的代价就是区间长度的平方。你要通过询问找出最大的数所在的位置,并且你询问的总代价不能超过5*n的平方。思路:先把n划分为n/2个长度为2的区间,然后询问......
  • floyd 专题 - 2
    8.29模拟赛小记。A.时间复杂度,洛谷原题指路:P1522[USACO2.4]牛的旅行CowTours首先为啥从100pts->88->77。因为打完第一遍之后感觉思路不太对,少考虑了一个部分,然后加了一个并查集。挂分是因为连通块合并写挂了(基础还能错是我有罪)。所以属实没想到第一遍能AC,那份码在洛......
  • 连接redis后 ,报错: ERR wrong number of arguments for ‘hset‘ command“怎么解决
    原因:ERRwrongnumberofargumentsfor‘hset‘command触发代码 解决方法:可能是java不匹配我本地3.2版本的redis,我换一个更大版本的redis就解决了 ......