20170117 機房 練習賽

2021-07-26 05:59:16 字數 3824 閱讀 9609

現代科學,面廣枝繁,不是一輩子學得了的。惟一的辦法是集中精力,先打破一缺口,建立一塊或幾塊根據地,然後乘勝追擊,逐步擴大研究領域。此法單刀直入,易見成效。

—— 王梓坤

我熱愛生活,我是一名快速成長的oier

#include 

#include

#include

#define program_name "color"

using

namespace

std;

template

inline

void readin(te &res)

const

int maxn = 100000+10000;

const

int maxm = 250000*2+10000;

const

int maxt = 100000+10000;

struct edge

t[maxm];

int t, n, m;

int u, v, num, head[maxn];

int team[maxt], volk[maxn];

inline

void insert(int u, int v)

void solve()

team[1]=1;volk[team[1]]=1;

int front=1,rear=2;

for (; front!=rear; front=front%maxt+1)

for (int i=head[team[front]]; i!=0; i=t[i].next)

if (volk[t[i].v]==-1)

else

if (volk[t[i].v]==volk[team[front]])

printf("yes\n");

} int main()

第一題70,bfs。但以上程式有bug,只for了一遍死的很慘,要多for。

時間複雜度:o(

n)

#include 

#include

#include

#define program_name "book"

using

namespace

std;

template

inline

void readin(te &res)

const

int maxn = 5000+100;

const

int maxm = 100000*2+1000;

const

int maxt = 5000+100;

struct edge

t[maxm];

int n, m, st, a[maxn];

int u, v, w, num, head[maxn];

int team[maxt], dis[maxn];

bool vis[maxn];

inline

void insert(int u, int v, int w)

int main()

team[1]=st;dis[team[1]]=0;vis[team[1]]=1;

for (int front=1,rear=2; front!=rear; front=front%maxt+1)

}vis[team[front]]=0;

}int fm=0;

for (int i=1; i<=n; i++) if (fmprintf("%d\n",fm>=dis[n+1]?-1:fm);

return

0;}

第二題ac,spfa,點權+邊權處理。點權加入邊權,另需包擴終點點權。

時間複雜度:o(

ke)

#include 

#include

#include

#include

#include

using

namespace

std;

#define program_name "teacher"

using

namespace

std;

template

inline

void readin(te &res)

const

int maxn = 1000+100;

const

int maxw = 1000+100;

const

int maxt = 1000+100;

int n, m, t, w[maxn], b[maxn], fa[maxn], u, v;

int volki=0, volk[maxt], head[maxt], next[maxn], min[maxt], f[maxw];

int find(int x)

inline

void findi(int x)

int main()

for (int i=1; i<=n; i++) if (!volk[i]) findi(i);

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

}printf("%d\n",f[t]);

return

0;}

第三題ac,當時為了分組編了許久。先用並查集分組,再kij動規解決。

時間複雜度:o(

nw)

練習賽是用來練經驗和心態的,一定要淡薄功利,當作是一場修煉。林蔭的人很「恐怖」,但千萬不要妄自菲薄,更不要夜郎自大。現在所學的知識已有很多拓展,一定要跳出問題想問題,深處問題核心去解決問題。葉余非很強,可與之共勉。

#include 

#include

#include

#define program_name ""

using

namespace

std;

template

inline

void readin(te &res)

int main()

#include 

#include

#include

#define program_name "color"

using

namespace

std;

template

inline

void readin(te &res)

const

int maxn = 100000+10000;

const

int maxm = 250000*2+10000;

const

int maxt = 100000+10000;

struct edge

t[maxm];

int t, n, m;

int u, v, num, head[maxn];

int team[maxt], volk[maxn];

inline

void insert(int u, int v)

void solve()

for (int d=1; d<=n; d++) if (volk[d]==-1)

else

if (volk[t[i].v]==volk[team[front]])

}printf("yes\n");

}int main()

機房練習賽 Dinner

本來看到這道題的第一想法是環形區間dp的,但是模擬完樣例我就恍然大悟,在10的時間內可以同時讓1,5點完餐,那不就是找最大值得最小值嗎?然後就是二分答案了,二分最少時間。然後就是我的玄學check 我在考試的時候是想到了變成二倍鏈在區間上處理的,但我直接o n 處理了每個區間的和不大於x的塊,然後列...

機房練習賽4 3 drive

input file drive.in output file drive.out time limit 2 second 工頭cky 最近開了一家 公司,開始經商。作為cky 的忠實小弟,jyb 當了cky 老總的司機。一天晚上,cky 突然找到了乙個新的客戶,所以第二天一早要急著從成都去上海談生...

機房練習賽4 3 graph

input file graph.in output file graph.out time limit 1 second jyb 給大家講過強連通分量,強連通分量中的任意兩點之間都可以互相到達。這個條件感覺很苛刻,大部分圖 都不能滿足。現在jyb 告訴你乙個新的概念 單向連通圖 如果有向圖中,對於...