HNOI2015 實驗比較

2021-09-24 16:04:46 字數 1542 閱讀 5252

description

input

output

sample input

5 4

1 < 2

1 < 3

2 < 4

1 = 5

sample output

5
data constraint

首先對於給出的等於條件,我們可以直接把點合併。對於合併後的圖,我們發現要麼是環,要麼是樹,環則直接無解,樹我們可以用樹形dp處理一下。

我們發現每個序列都被「k那麼表示j中有些塊要以等於形式和a合併,方案數c(i,i+j-k),所以對新答案貢獻為f[a][i]*f[b][j]*c(k,i)*c(i,i+j-k),這樣轉移即可

#include#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;vector

v[111

];int mo=1000000007

;int c[111][111],f[111],g[111],next[111],y[111

];int f[111][111],size[111],du[111

];bool vis[111

],pz;

intn,i,tt,x,z,kn,m,ans,j;

void

read()

int find(int

r)void star(int i,int

j)void dfs(int

x) j=next[j];

}}void dp(int

x)

else

for(i=0;i<=mx[2];i++)h[i][0]=h[i][2

]; mx[

0]=mx[2

]; }

}if(!g[x])f[x][1]=1

;

else

}int

main()

for(i=2;i<=100;i++)

for(j=1;j1][j]+c[i-1][j-1])%mo;

for(i=1;i<=n;i++)f[i]=i;

for(i=1;i<=m;i++)

}for(i=1;i<=n;i++)f[i]=find(f[i]);

for(i=1;i<=n;i++)

}pz=true

; size[n+1]=1

;

for(i=1;i<=n;i++)

}for(i=1;i<=n;i++)if(f[i]==i&&!vis[i])pz=false

;

if(pz==false)printf("

0\n"

);

else

}

HNOI2015 實驗比較

description input output sample input 5 4 1 2 1 3 2 4 1 5 sample output 5data constraint 首先對於給出的等於條件,我們可以直接把點合併。對於合併後的圖,我們發現要麼是環,要麼是樹,環則直接無解,樹我們可以用樹形d...

HNOI2015實驗比較 題解

記得幾個月前自己曾經做過一道關於一張dag求排列的問題,現如今遇到了的是一道關於樹求排列的問題.這乙個問題看似簡單實際上有乙個細節那就是他可以取 這就使得複雜度公升高了.首先,最簡單的插孔原理。這乙個非常簡單,做這道題時,蒟蒻我現推式子。為什麼要解決這個問題呢,因為最基本的,在不考慮等於的情況下,n...

HNOI2015實驗比較 樹型DP

我看了一下,網上好像沒有跟我一樣做法的,而且我根本學不會那個做法。那我只好發個部落格啦 做法也許有錯 有n n 個物品和 m role presentation style position relative m m個條件,每個條件表示 i i 的權值小於或等於 j role presentatio...