Codeforces 404C Restore Graph 构造

点击打开链接

题意:给出n个点的最短距离数组d[i],每个顶点的度数<=K,构造出满足条件的图,输出边
先将距离d[i]排序,从小到大构造边 保存最短距离为x-1的点pre,把距离为x的连接到x-1上,每个pre[i]最多连接k次,更新pre即可 复杂度O(M)==1e6

#include 
using namespace std;
typedef pair ii;
const int N=2e5+20;
struct node{
	int id,x;
}d[N];
bool cmp(node a,node b)
{
	return a.x ans;//u-v
vector pre,now;// 距离为k-1的点,使用次数 
int main()
{
	while(cin>>n>>K)
	{
		int u=-1;
		bool flag=true;
		for(int i=1;i<=n;i++)
			scanf("%d",&d[i].x),d[i].id=i; 
		sort(d+1,d+1+n,cmp);
		for(int i=1;i<=n;i++)
		{
			if(d[i].x==0)
			{
				if(u==-1)
					u=i;
				else
					flag=false;
			}
		}
		if(u==-1||flag==false)
		{
			puts("-1");
			continue;
		}
	
		ans.clear(),pre.clear(),now.clear();	
		int i=2,j;
		pre.push_back(ii(u,K));
		for(int k=1;k


你可能感兴趣的:(CODEFORCES_,Constructive,&,BruteForce)