第三次模擬賽 訂正題解

2022-03-29 14:14:41 字數 3151 閱讀 2251

這次考試是乙個圖論專練,從海亮回來圖論已經搞了好幾個月了,感覺有些問題的思想還是要好好揣摩一下,理解思路才能知道怎麼做;

第一題:

第一遍沒看見有向圖,建了個圖跑了個tarjan,後來發現讀錯題,我們來看一下謎一樣的水資料,這o(n*m)的複雜都能過;

隨便寫乙個dfs吧,當前點遍歷到的點的個數+1,如果遍歷n個點,那麼滿足條件,記錄下來,沒什麼可說的了;

然後資料沒讓我失望,a了;

#includeusing

namespace

std;

#define n 500010template

inline void read(t &x)

while(isdigit(ch))

x*=f;

}int

n,m,x,y,tot,cnt,num,root,dfn[n],low[n],ans[n],v[n],lin[n];

struct

gg a[n

<<1

];inline

void add(int x,int

y) void dfs(int

x) int

main()

if(!k)

printf(

"%d\n

",k);

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

%d "

,ans[i]);

return0;

}

view code

第二題:

我們來簡化一下題意哈:

每次選擇兩個點異或起來,再刪除乙個直至剩乙個點,並且保證異或和最大;

剛拿到題:以為是個trie樹,正準備寫,可是我不會怎麼處理每次刪除哪乙個會更優;

後來想了想,是個最大生成樹,然後每兩個點之間的權值是異或值,跑乙個prim或者kruskal,考場上sb的推翻自己以為是基於點,我非得寫prim;

資料還是沒讓人失望,讓我這個sba了;

那沒事,我現在補齊兩種做法;

prim:

#includeusing

namespace

std;

#define n 2500

#define ll long longtemplate

inline void read(t &x)

while(isdigit(ch))

x*=f;

}ll ans=0

;int

n,a[n],map[n][n],dis[n],vis[n];

inline

void

prim_x() }}

}int

main()

view code

kruskal:

#includeusing

namespace

std;

#define n 50010

intn,k,tot,h[n],father[n];

long

long

ans;

template

inline void read(t &x)

while(isdigit(ch))

x*=f;

}struct

gg a[n

<<1

];inline

int find(int

x) bool

mycmp(gg x,gg y)

intmain()

}sort(a+1,a+tot+1

,mycmp);

k=0;

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

cout

return0;

}

view code

第三題:

re了乙個點,? 。跑n邊spfa的人都過了,;

我們往常寫的都是一對多的spfa,那麼今天寫乙個多對一的spfa,反向建圖;

對於每個點我們要求出這個點到點x再回來的最短路,

點x到這個點的最短路只需要跑一遍以點x為源點的最短路就行了,

但是每個點到點x的最短路怎麼求呢?把邊反向之後再跑一遍以點x為源點的最短路就行了。

**;考場寫的**太醜了,所以又寫了一遍;

#includeusing

namespace

std;

#define inf 0x3f3f3f

#define n 50010template

inline void read(t &x)

while(isdigit(ch))

x*=f;

}int

n,m,s,tot,cnt,a,b,l,dis1[n],dis2[n],lin1[n],lin2[n],vis[n];

struct

gg e1[n

<<1],e2[n<<1

];inline

void add1(int x,int y,int

v) inline

void add2(int x,int y,int

v) inline

void

spfa1() }}

}}inline

void

spfa2() }}

}}int

main()

spfa1(); spfa2();

int ans=0

;

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

ans=max(ans,dis1[i]+dis2[i]);

cout

return0;

}

view code

分數:290分,另外10分獻給sb的自己;

本來計畫最近複習圖論,結果直接考了,最近計畫複習圖論考點,寫寫以前的經典題目,還要學搜尋最近,加油!

9 23 模擬賽訂正題解

感覺是真的有點鬼畜啊這題目 來自我這個同學的小聲bb 好了 我這個同學又來訂正題目了 t1 驚現數學必修五 數列 裂項相消的 關於帶根號的放縮 別問我怎麼知道的 考試前數學老師發的學案上 印著我們oi考試的t1 很痛心 不上數學課的我 不過 即使沒有那個學案也能搞出來這個題目 因為 只要讀題了 我們...

第三次模擬測試 A

題目描述 相較於咕咕東,瑞神是個起早貪黑的好孩子,今天早上瑞神起得很早,刷b站時看到了乙個序列a,他對這個序列產生了濃厚的興趣。他好奇是否存在乙個數k,使得一些數加上k,一些數減去k,一些數不變,使得整個序列中所有的數相等。其中對於序列中的每個位置上的數字,至多只能執行一次加運算或減運算或是對該位置...

第三次訓練賽

include using namespace std typedef long long ll const int maxn 2e5 10 vector int mp maxn int n,m,s maxn int ans 0,mx void dfs int i,int pre,int cnt p...