考慮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...