bzoj5492 Hnoi2019 校園旅行

2022-05-19 05:13:32 字數 1023 閱讀 1826

考慮30分做法:暴力bfs,\(f[i][j]\)表示\(i\)到\(j\)可以形成回文串

然而為什麼我場上只想到了70分做法,完全沒想到30分怎麼寫。。

100分:

考慮縮邊,對於每條邊分3種情況:標號同為1,標號同為0,標號不同

1、同為1:考慮如果這是個二分圖,那麼可以轉化為一顆生成樹,對答案無影響,如果不是二分圖,那麼就隨意加一條自環,這樣就可以同時出現奇回文和偶回文

2、同為0:同上

3、不同,只有可能是二分圖,直接建生成樹就好了

這樣下來邊的數量就是\(o(n)\)級的了

然後再暴力跑bfs就好了,沒錯,就是那個30分做法,總複雜度\(o(n^2)\)

**:

#include#include#include#include#includeusing namespace std;

void read(int &x)

#define rg register

const int maxn=1e6+10;queue>q;

int n,m,qq,f[5010][5010];char ch[5010];

struct oo

}a,b,c,d;

void dfs1(int x,int v)

void dfs2(int x,int v)

void dfs3(int x,int v)

#define mk(a,b) make_pair(a,b)

void solve()

}int main()

memset(a.w,-1,sizeof a.w);

memset(b.w,-1,sizeof b.w);

memset(c.w,-1,sizeof c.w);

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

if(b.w[i]==-1)

if(c.w[i]==-1)

} solve();

for(rg int i=1,x,y;i<=qq;i++)

}

bzoj 2326 HNOI2011 數學作業

題目大意 給你n,m,求concatenate 1.n mod m的值 concatenate 1.n 代表把1到n連起來 比如n 13時 concatenate 1.n 就是12345678910111213 n 10 1 m 10 9 這題很水,對於n,將其分開,比如145,就分成1 9,10 ...

BZOJ1010 HNOI2008 玩具裝箱toy

先把程式放著,週末來更新 華麗的分割線 不想寫題解了。照著網上的題解推一邊即可 注意有的題解最後推倒出來明明是求上 下 凸包的形式,但配的圖卻是下 上 凸包的。不過斜率優化還不是搞的很懂。time limit 1 sec memory limit 162 mb submit 6661 solved ...

BZOJ4010 HNOI2005 菜餚製作

分析 這應該比較明顯是個拓撲排序。序號小的要放前面,但是會受到後面很多菜的限制。其實序號小的優先考慮和序號大的最後考慮應該是差不多的。不知道科不科學,求大神指正 把圖中的邊全部反向,拓撲 堆維護剩下的節點中度為0且序號最大的。把得到的序列反向輸出。include include using name...