题目:告诉你每两个点之间的最短路距离。构造每条边边权<=m的无向完全图。求有多少种不同边权的图满足最短路限制?n<=400.

标程:

 #include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int mod=;
const int N=;
int n,a[N][N],c[N][N],g[N],f[N],sz[N],h[N],ans,m;
bool ok()
{
for (int i=;i<=n;i++) if (a[i][i]) return ;
for (int i=;i<=n;i++)
for (int j=i+;j<=n;j++) if (a[i][j]!=a[j][i]||a[i][j]>m) return ;
for (int i=;i<=n;i++)
for (int j=i+;j<=n;j++)
for (int k=;k<=n;k++)
if ((ll)a[i][k]+a[k][j]<a[i][j]) return ;
return ;
}
int find(int x) {return x==f[x]?x:f[x]=find(f[x]);}
int ksm(int x,int y)
{
int res=;
while (y) {if (y&) res=(ll)res*x%mod; x=(ll)x*x%mod; y>>=;}
return res;
}
void init()
{
for (int i=;i<=n;i++) c[i][]=;
for (int i=;i<=n;i++)
for (int j=;j<=i;j++) c[i][j]=((ll)c[i-][j]+c[i-][j-])%mod;
}
int main()
{
scanf("%d%d",&n,&m);init(); ans=;
for (int i=;i<=n;i++)
for (int j=;j<=n;j++) scanf("%d",&a[i][j]);
if (!ok()) return puts(""),;
for (int i=;i<=n;i++) f[i]=i;
for (int i=;i<=n;i++)
for (int j=i+;j<=n;j++) if (!a[i][j]) f[find(i)]=find(j);
for (int i=;i<=n;i++) sz[find(i)]++;
for (int i=;i<=n;i++)
if (f[i]==i)
for (int j=i+,k;j<=n;j++)
if (f[j]==j)
{
for (k=;k<=n;k++)
if (f[k]==k&&k!=i&&k!=j&&a[i][j]==(ll)a[i][k]+a[k][j]) break;
int ts=sz[i]*sz[j];
if (k<=n) ans=(ll)ans*ksm(m-a[i][j]+,ts)%mod;
else ans=(ll)ans*(ksm(m-a[i][j]+,ts)-ksm(m-a[i][j],ts)+mod)%mod;
}
for (int i=;i<=n;i++)
{
g[i]=h[i]=ksm(m+,i*(i-)/);//h[i]表示i个点不保证mst=0的方案数。g[i]表示包含1点和其他i-1个点中保证有mst=0的方案数。
for (int j=;j<i;j++)
g[i]=(ll)(g[i]-(ll)g[j]*h[i-j]%mod*c[i-][j-]%mod*ksm(m,j*(i-j))%mod+mod)%mod;
}
for (int i=;i<=n;i++) if (f[i]==i) ans=(ll)ans*g[sz[i]]%mod;
printf("%d\n",ans);
return ;
}

易错点:1.不要漏取模。

题目:性质+并查集+容斥dp

特判一下不合法(无解)的情况。

考虑一张没有0边的图(如果有0边的话ijk三角形中会有两条边被判作无用),当a[i,j]=a[i,k]+a[k,j]时,a[i,j]这条边可以在a[i,j]~m中任取,这条边是没有贡献的。

考虑特殊的0边,如果有一些点对的距离为0,那么就用并查集缩起来,那么这个图就变成了若干个连通块,每个连通块中的点对之间的距离都是0。

所以就可以在连通块之间做没有0边的情况(两个连通块之间的所有边应该都是相等的,一条边的贡献可以直接统计sz[i]*sz[j]次),在连通块内用套路容斥出mst=0的边权方案数。

复杂度O(n^3).

uoj279 题目交流通道的更多相关文章

  1. uoj279题目交流通道(dp)

    题目大意: 神犇星球有 \(n\) 座小城.对于任意两座小城 \(v,u\)\((v≠u)\),吉米多出题斯基想在 \(v,u\) 之间建立一个传送时间为 \(w(v,u)\)的无向传送通道,其中 \ ...

  2. 【UTR #2】[UOJ#278]题目排列顺序 [UOJ#279]题目交流通道 [UOJ#280]题目难度提升

    [UOJ#278][UTR #2]题目排列顺序 试题描述 “又要出题了.” 宇宙出题中心主任 —— 吉米多出题斯基,坐在办公桌前策划即将到来的 UOI. 这场比赛有 n 道题,吉米多出题斯基需要决定这 ...

  3. UOJ279 【UTR #2】题目交流通道

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000  作者博客:http://www.cnblogs.com/ljh2000-jump ...

  4. 【UTR #2】题目交流通道

    题目描述 定好了难度,雄心勃勃的吉米多出题斯基开始寻找智慧的神犇星球的居民出题. 然而吉米多出题斯基没有料到,神犇星球的居民告诉吉米多出题斯基:"今年神犇星球经济不景气,大家都想宅在家里,哪 ...

  5. 【UOJ #279】【UTR #2】题目交流通道

    http://uoj.ac/problem/279 先判断答案为0的情况,\(d(i,i)\neq 0\),\(d(i,j)\neq d(j,i)\),\(d(i,j)>d(i,k)+d(k,j ...

  6. uoj#279. 【UTR #2】题目交流通道(容斥+数数)

    传送门 先考虑无解的情况,为以下几种:\(dis_{i,j}+dis_{j,k}<dis_{i,k}\),\(dis_{i,i}\neq 0\),\(dis_{i,j}\neq dis_{j,i ...

  7. UOJ Test Round #2

    昨天晚上打的这个比赛,简直一颗赛艇啊-- 感觉发挥的并不好.比赛的时候比较紧张,最后一题还脑残写了个离散化结果爆零了,哎我怎么这么逗逼-- 讲讲比赛经过吧. 比赛之前逗逼地以为是8:00开始,然后淡定 ...

  8. Noip模拟62 2021.9.26

    T1 Set 真就随机化拿了$90$?? 不过还是有依据的,毕竟这道题出解的几率很大,随出答案的概率也极大 所以不妨打一个随机化 1 #include<bits/stdc++.h> 2 # ...

  9. 2021.9.26考试总结[NOIP模拟62]

    T1 set 从\(0\)到\(n\)前缀余数有\(n+1\)个,但只有\(n\)种取值,找到一样的两个输出区间即可. \(code:\) T1 #include<bits/stdc++.h&g ...

随机推荐

  1. linux下mysql权限配置

    先登入mysql mysql -u root -p 然后回车键入密码! 1.2 赋予主机B操作数据库的权限 mysql> grant usage on *.* to username@192.1 ...

  2. iOS13适配/黑暗模式的适配/KVC访问私有属性/模态弹窗ViewController 默认样式改变 /LaunchImage即将废弃/蓝牙的权限申请/推送Device Token适配/UIKit 控件变化/StatusBar新增样式

    目录 1. KVC访问私有属性 2. 模态弹窗ViewController 默认样式改变 3. 黑暗模式的适配 4. LaunchImage即将废弃 5. 新增一直使用蓝牙的权限申请 6. Sign ...

  3. git rm --cached (解决:modified: .idea/workspace.xml,git idea 操作完之后不能pull)

    错误解决:modified: .idea/workspace.xml 这个错误是本地的.idea提交到了远端. 解决办法: .gitignore文件加上: .dea/workspace.xml 可是. ...

  4. Codeforces 1174A Ehab Fails to Be Thanos

    题目链接:codeforces.com/problemset/problem/1174/A 题意:给定长度2n 的数组,改变数组顺序,使得前 n 个数的和不等于 后 n 个数的和,不行输出-1. 思路 ...

  5. [kuangbin带你飞]专题一 简单搜索 - L - Oil Deposits

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...

  6. 02ubuntu下python环境安装

    原文链接:https://blog.csdn.net/weixin_42549407/article/details/85198460 我安装的是python3.6.9 1.下载python的源码压缩 ...

  7. 【2018ACM/ICPC网络赛】徐州赛区

    呃.自闭了自闭了.我才不会说我写D写到昏天黑地呢. I  Characters with Hash 题目链接:https://nanti.jisuanke.com/t/31461 题意:给你一个字符串 ...

  8. QT5+Pylon

    VS+QT+Pylon:配置一下包含文件和libs,具体参考pylon说明文档. Windows下  Qtcreator+Pylon:建议把include和libs文件夹拷贝至工作目录,然后修改.pr ...

  9. flask-Local源码流程解析

    flask中Local源码数据类型首先明确:源码中要构造的数据类型数是这样的: __storage__ = { 用线程或者协程的唯一标识为键: {stack:[ctx(session/request) ...

  10. Docker 尝试安装rabbitmq实践笔记

    docker pull rabbitmq 自定義的rabbitmq Dockerfile # base image FROM rabbitmq:3.7-management # running req ...