2021 2 月賽補題A C

2022-06-09 05:03:09 字數 2134 閱讀 7127

我一直覺得eoj的題解寫的可以,所以思路和題解基本參考eoj官方題解。

連線:這場真不愧是oi爺出題,我還沒摸鍵盤,只是在地鐵上看了看a,知道是個lca,沒有想出來dfs序,就開始自閉了。

但我覺得這場題目很好,值得一寫。

a.

/*

首先要知道兩個結論:

1.就是n個點的lca就是dfs序差最大的一組數的lca,所以先要對這5個點進行dfs序排序,求出5個點的lca

2.其餘的點u對已經有的點合併:u對已存在的點求lca,深度最深的lca就是離這個點u最近的公共節點

複雜度o(10qlogn)

*/#includeusing namespace std;

typedef long long ll;

#define debug(x) cout<<#x<<':'<>g[maxn];

void dfs(int root,int b)

int sz=g[root].size();

for(int i=0;i=0;i--)

if(x==y) return x;

for(int i=31;i>=0;i--)

}return father[x][0];

}bool cmp(int a,int b)

}ans+=dis[a[j]]-dis[bst_lca];

}printf("%d\n",ans);

}return 0;

}

b.
/*

對每個人起終點bfs求單源最短路,然後算通過每點的概率

pre陣列表示到該點最短路的數量,1表示從起點出發,0表示從終點出發

複雜度o(n*k)

*/#includeusing namespace std;

typedef long long ll;

const int maxn=1e5+100;

const int inf =0x3f3f3f3f;

double sum[maxn];

vectorg[maxn];

int n,m,u,v,k;

int a[maxn],b[maxn],pre[maxn][2],d[maxn][2],vis[maxn];

#define debug(x) cout<<#x<<':'for(int i=1;i<=n;i++) vis[i]=0,d[i][f]=inf;

q.push(s);d[s][f]=0;pre[s][f]=1;

while(!q.empty())else if(d[v][f]==d[u][f]+1)}}

}int main()

scanf("%d",&k);

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

}int ans=1;

double dmax=0;

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

printf("%d",ans-1);

}

c.
/*

這題我一開始就覺得是一道lazy線段樹,但以下的**是根據eoj說的題解補的,我覺得這個寫法更簡單

核心思想是:牢牢把握住每段區間最小的值,也就意味著對於當前這個區間[mini[w].first,mini[w].second]必然有i,

而絕沒有比它小的數,那就意味著可以隨意取這個區間之內的乙個位置來放這個值

*/#includeusing namespace std;

const int maxn=2e5+100;

int ans[maxn],vis[maxn],n,q;

//#define debug(x) cout<<#x<<':'void deal(int n)

int main(),maxi[i]=;

s.insert(i);

}while(q--)

queueq;

for(int i=n;i>=1;i--)

s.erase(st, ed);}}

for (auto to : s)

ans[to] = q.front();q.pop();

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

//system("pause");

return 0;

}

牛客小白月賽13 補題(ACDG)

a 通過已經給的 打表找規律,偶數輸出 1,奇數輸出1 includeusing namespace std int main void huaj ll a,ll b int main qianz 0 0 houz n 1 0 qianz 1 mp 1 houz n mp n for i 2 i n...

牛客的小白月賽24補題

沒注意負數取模 呀呀呀呀,打腦殼 保證取模後的結果為正數 x mod mod mod 思路1.挨個嘗試肯定超時 2.就是把平方項展開 a2 b2 2ab 每個平方項的出現次數n 1次 每個2ab形式的和 最後一定注意取余為正數 戳我試試看 include include include includ...

新生賽補題

題目大意 構造乙個長度為n的嚴格遞增序列,每個數都屬於 1,m 求方案數,結果模998244353。dp的轉移方程 第一位數 i 代表的是遍歷到第幾個數了,j代表的是當前位是幾。dp i j dp i 1 j dp i j 1 ac include using namespace std const...