Problem A 时之终结

构造一个含有$n$个节点的无重边无自环的有向图,

使得从$1$出发,每一次经过一条$(u,v) (u < v)$的边到达节点$n$的方案恰好有$y$种。

对于$100\%$的数据,输出的无向图顶点树$n \leq 64 $给出的$y \leq 10^{18}$

Sol : 首先构造$63$个点的完全图,然后向第64个顶点连边,原问题等价于将$y$二进制拆分。

   这样构造可以获得满分:复杂度$O( {log_2}^2 n)$

# include <bits/stdc++.h>
# define int long long
using namespace std;
bool mp[65][65];
signed main()
{
    int y; scanf("%lld",&y); 
    int cnt=0;
    for (int i=1;i<=63;i++) for (int j=i+1;j<=63;j++) mp[i][j]=1,cnt++;
    for (int i=0;i<=63;i++) if ((y>>i)&1ll) mp[i+2][64]=1,cnt++;
    printf("64 %lld\n",cnt);
    for (int i=1;i<=64;i++)
     for (int j=i+1;j<=64;j++)
      if (mp[i][j]) printf("%lld %lld \n",i,j);
    return 0;
}
A.cpp

相关文章:

  • 2021-09-30
  • 2021-07-06
  • 2021-09-11
  • 2021-05-19
  • 2021-08-01
  • 2021-06-08
  • 2022-03-08
  • 2021-09-04
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案