CodeForces 404C Restore Graph

题意:

n个点的图  最大度为k  已知从某个点到每个点的距离dis[i]  求  这幅图的边


思路:

告诉了距离  很容易想到dis是从距离为0的那个点开始bfs求出来的

那么复原这幅图的办法就是重新构造这棵bfs形成的树就好了

每层利用点数计算一下是不是违反了最大度k的限制

这里注意  只有dis=0的那个点可以连出k条边  其余的只有k-1条(因为它们还和父亲连着一条边)


代码:

#include
#include
#include
using namespace std;
#define M 100010

int n,m,yes;
struct node
{
    int id,dis;
    bool operator<(const node ff) const
    {
        return dis(__int64)(lasr-lasl)*m)
               || (root!=qu[lasl]&&now-lasr>(__int64)(lasr-lasl)*(m-1)) )
            {
                yes=0;
                break;
            }
            for(j=lasr,k=0;j


你可能感兴趣的:(图论,CodeForces)