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的值 輸...