20160602常規賽總結

2021-07-13 01:58:11 字數 1694 閱讀 6191

task1蠻有趣

task2暴力dp==聽老師講了什麼字首和愣是沒想通暴力的dp為什麼要字首和。。如果有字首和我的dp就是o(n)了。。

task3有一些問題

比如為什麼關於開關問題同乙個區間不會反轉兩次,雖然理由很有道理,但是我理解不通。。智商不夠。。

那麼以後只好記結論了

最後一題放一下題目講一下思路。

圖染色

description

給定乙個n個點,m條邊的無向圖。每條邊都有一種顏色,』r』或者』b』;

每次染色可以選擇乙個點,把與這個相連的邊的顏色都翻轉。

求最少選擇幾個點進行染色,使得所有邊的顏色最後都相同!

solution

這個標點有點鬼。。

反正大概知道是開關問題了,那就很簡單了。

首先列舉每個聯通塊的顏色。

並查集搞一下就差不多了。

怎麼都覺得自己是第一次敲影子並查集。

[源**]:

#include

#include

#include

#include

#include

using

namespace

std;

#define pb push_back

#define vec vector

const

int m=4e5+5;

struct node;

vector

g[m];

vec nod;

int n,m,fa[m],cnt[m];

bool mark[m];

inline

void rd(int &a)

inline

int find(int x)

inline

void min(int &a,int b)

void dfs(int v,const

bool clr)

f1=find(v+n),f2=find(u.to+n);

if(f1^f2)

}else

f1=find(v+n),f2=find(u.to);

if(f1!=f2)

}if(!mark[u.to])dfs(u.to,clr);

}}int main()),g[b].pb((node));

}int ans1=0,ans2=0;

for(int i=1;i<=n;++i)fa[i]=i,fa[i+n]=n+i,cnt[i]=1;

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

if(!mark[i])

if(ct==1)res1=m;

else

}nod.clear();

dfs(i,1);

int res2=-1;

ct=0;

for(int j=0;jif(nod[j]==fa[nod[j]])++ct;

if(nod[j]+n==fa[nod[j]]+n)++ct;

}if(ct==1)res2=m;

else

}ans1+=res1;

ans2+=res2;

}cout

0;}

**略長,略醜。。但是思路很簡單咯。

20160609常規賽總結

kao這場比賽也是醉了。下午剛騎完環城晚上醉醺醺的。敲完以後覺得感覺很好,就估分估了240 被小c嚴重鄙視說不可能 然後第一題爆0了 現在說一下題目。t1 模擬題,因為兩句話寫反了導致全部都t了。t2 一道裸的字首和優化dp 算了還是寫的詳細點吧 sourcescodeforces 645 e de...

2016 10 5常規賽總結

哈哈忍不住先自嘲一下 不過其實今天做的還是很不錯的,比前幾次花式倒數強多了。特別是第三題的樹鏈剖分200行能夠寫出來還是感覺很棒的。雖然ak大犇直接暴力修改就過了 第一題有乙個地方,細節做得不是很好,只有90分,當然如果想法比較好的話就不會有這些問題了,也會比較短。第二題沒什麼問題,直接dp稍微優化...

小公尺 OJ 程式設計比賽 02 月常規賽

carryon 最近迷上了數數字,然後 starry 給了他乙個區間 l,r 然後提了幾個要求,需要將 ll 到 rr 之間的數全部轉化成 16 進製,然後連起來。將連起來的數又轉化成 10 進製。將最終結果對 15 取模。資料範圍 1 l r 1000000000000 單組輸入 l和 r的值 輸...