首页 > 其他分享 >鲜花.cpp

鲜花.cpp

时间:2023-12-16 20:33:07浏览次数:31  
标签:rt return 鲜花 int inv long cpp mod

ovo Never gonna give you up~

Never gonna let you down~

昨天 T2 求调捏qwq

得分 \(55\),分别在 #3,#5,#7 wa 了。

//transport
#include<bits/stdc++.h>
#define N 1010
#define M 4010
using namespace std;
const long long mod=1e9+7;

long long qpow(long long base,int power){
    long long ans=1;
    for(;power;power>>=1,base=(base*base)%mod)
        if(power&1) ans=ans*base%mod;
    return ans;
}

int c[M],si[M];
long long f[M][M],g[M][M],w[M][M];
int path[N][N],d[N][N];
int cnt[M];
int to[M][2];
int siz[N];
bool vis[M];

struct edges{
    int s,e,nex,id;
    bool vi;
}ed[N<<1];
int pre[N],ti=1;

inline void add(int s,int e,int id){
    ed[++ti]={s,e,pre[s],id,0};
    pre[s]=ti;
    return;
}

void dfs_a(int x,int fa){
    siz[x]=1;
    for(int i=pre[x];i;i=ed[i].nex){
        if(ed[i].e==fa||ed[i].vi) continue;
        dfs_a(ed[i].e,x);
        siz[x]+=siz[ed[i].e];
    }
    return;
}

void dfs_b(int x,int fa,int S,int &ans){
    for(int i=pre[x];i;i=ed[i].nex){
        if(ed[i].e==fa||ed[i].vi) continue;
        if((S-siz[ed[i].e])*siz[ed[i].e]==cnt[ed[i].id]) ans=i;
        dfs_b(ed[i].e,x,S,ans);
    }
    return;
}

int init(int rt){
    dfs_a(rt,0);
    int ans=0;
    dfs_b(rt,0,siz[rt],ans);
    int s=ed[ans].s,e=ed[ans].e,x=ed[ans].id;
    si[x]=siz[rt];
    c[x]+=siz[rt]-1;
    if(siz[s]<siz[e]) swap(s,e);
    ed[ans].vi=1;
    ed[ans^1].vi=1;
    if(siz[rt]-siz[e]-1) to[x][0]=init(s);
    if(siz[e]-1) to[x][1]=init(e);
    c[x]+=c[to[x][0]]-si[to[x][0]]+1;
    c[x]+=c[to[x][1]]-si[to[x][1]]+1;
    return x;
}

long long fac[M],inv[M];

void inits(int m){
    fac[0]=1;
    for(int i=1;i<=m;i++) fac[i]=(fac[i-1]*i)%mod;
    inv[m]=qpow(fac[m],mod-2);
    for(int i=m-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
    si[0]=1;
    c[0]=0;
    f[0][0]=1;
    g[0][0]=1;
    return;
}

inline long long C(int n,int m){
    if(m>n) return 0;
    return fac[n]*inv[m]%mod*inv[n-m]%mod;
}

void solve(int rt){
    int x=to[rt][0],y=to[rt][1];
    if(x) solve(x);
    if(y) solve(y);
    int a=c[x]-si[x]+1,b=c[y]-si[y]+1;
    for(int i=0;i<=a;i++)
        for(int j=0;j<=b;j++)
            w[rt][i+j]=C(i+j,i)*C(c[x]-i+c[y]-j,c[x]-i)%mod*g[x][i]%mod*g[y][j]%mod;
    int k=c[rt]-c[x]-c[y]-1;
    for(int i=0;i<=a+b;i++) f[rt][i+k]=w[rt][i]*fac[k]%mod*C(k+i,i)%mod;
    for(int i=a+b+k;i>=0;i--) g[rt][i]=(g[rt][i+1]+f[rt][i])%mod;
    return;
}

int main(){
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=2;i<=n;i++)
        for(int j=1,ds;j<i;j++){
            scanf("%d",&ds);
            d[i][j]=ds;
            d[j][i]=ds;
            cnt[ds]++;
            vis[ds]=1;
        }
    for(int i=1,s,e;i<=m;i++){
        scanf("%d%d",&s,&e);
        path[s][e]=i;
        path[e][s]=i;
        if(d[s][e]!=i) c[d[s][e]]++;
        if(vis[i]){
            add(s,e,i);
            add(e,s,i);
        }
    }
    inits(m);
    int ma=init(1);
    solve(ma);
    printf("%lld",g[ma][0]);
}

标签:rt,return,鲜花,int,inv,long,cpp,mod
From: https://www.cnblogs.com/curly619/p/17908326.html

相关文章

  • 百度 推荐 投的cpp开发 不知道怎么给的推荐算法的岗位
    判断(){}是否合法?多线程通信方式手段?成员函数模板 类模板智能指针底层原理为什么引入linux文本定位到最后一行vi进入之后:$定位到最后一行  一、使用cat、tail、head组合1、查看最后100行的数据 catfilename|tail-n1002、查看100到300行的数据 cat......
  • Google代码规范工具之cpplint
    谷歌代码规范链接:https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/ 代码规范工具—cpplint:1)在Vscode中搜索并安装插件cpplint2)接着打开终端,输入sudopipinstallcpplint3)再次输入ls-l/usr/local/bin/cpplint检查安装目录,一般会安装......
  • linux mysql libmysqlcppconn select,update mysql
    #include<chrono>#include<cstring>#include<ctime>#include<fstream>#include<iomanip>#include<iomanip>#include<iostream>#include<memory>#include<mutex>#include<queue>#include<......
  • 【Cpp 语言基础】简单聊一聊to_string
    头文件:#include<string>功能:将数字常量转换为字符串参数:value返回值:转换好的字符串重载版本:std::stringto_string(intvalue);(1)(C++11起) std::stringto_string(longvalue);(2)(C++11起) std::stringto_string(longlongvalue);(3)(C++11起) std::stringto......
  • cpp的编译过程
    C++程序的编译过程通常分为四个主要步骤:预处理(Preprocessing):这个阶段主要处理源代码文件中的以“#”开头的预编译指令4。例如,对宏进行展开,对include的文件进行展开,处理条件编译选项判断,清理注释等。预处理后生成的文件通常以.i或.ii结尾2。编译(Compilation):编译阶段使用预......
  • 【Cpp 基础】泛型算法 stable_sort() 的应用
    最近在刷牛客的题。经常遇到排序问题,经常有一个附加的规则:相同的数值的,按照录入的顺序排序。可是C++的sort()的底层是快速排序,并不能保证相同数值的顺序不改变。所以最后我不得不自己写冒泡排序。(冒泡排序不改变相同数值的录入顺序)写了那么多的排序,但是其实C++里封装有排序函数......
  • opencv cpp的安装
    搞了半天,可算弄好了. vsopencvcpp: https://blog.csdn.net/weixin_50918736/article/details/130176469?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-130176469-blog-127627204.235%5Ev39%5Epc_relevant_a......
  • 鲜花3
    2023.12.5今天CTT的榜出了。一行一行往下数,不幸地,在【数据删除】的位置找到了摇奖。有些感慨,也不知道说些什么好。我和摇奖有过几面之缘,我还记得摇奖在他博客里说过想去CTS玩。事与愿违太常见,也太残忍。希望摇奖能越来越好!摇奖加油!晚上和女同学去操场转圈,转了挺久。感觉很好......
  • 鲜花
    济南打完了,感觉自己的算法竞赛生涯也结束的差不多了(?),完结撒鲜花来了。高中前没啥好说的,虽然接触了oi,但很摆。高中两年oi,我学到了啥呢?各种算法,各种人类智慧,特别是EI的多项式科技。是学到不少,但学到了这些在算法竞赛之外有啥用,没啊。高中打oi又对我有啥实际收益呢?noiday2......
  • cpp-houjie
    CPPHoujieSubtitle:侯捷C++课程笔记Created:2023-11-25T10:40+08:00Categories:CPP目录面向对象编程(上)C++程序设计(Ⅱ)兼谈对象模型C++标准库体系结构与内核分析附Component和Inheritance的构造和析构顺序虚函数、虚表、虚继承的内存布局参考资料面向对象编程(上)I......