這次考試是乙個圖論專練,從海亮回來圖論已經搞了好幾個月了,感覺有些問題的思想還是要好好揣摩一下,理解思路才能知道怎麼做;
第一題:
第一遍沒看見有向圖,建了個圖跑了個tarjan,後來發現讀錯題,我們來看一下謎一樣的水資料,這o(n*m)的複雜都能過;
隨便寫乙個dfs吧,當前點遍歷到的點的個數+1,如果遍歷n個點,那麼滿足條件,記錄下來,沒什麼可說的了;
然後資料沒讓我失望,a了;
#includeusingview codenamespace
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;
}
第二題:
我們來簡化一下題意哈:
每次選擇兩個點異或起來,再刪除乙個直至剩乙個點,並且保證異或和最大;
剛拿到題:以為是個trie樹,正準備寫,可是我不會怎麼處理每次刪除哪乙個會更優;
後來想了想,是個最大生成樹,然後每兩個點之間的權值是異或值,跑乙個prim或者kruskal,考場上sb的推翻自己以為是基於點,我非得寫prim;
資料還是沒讓人失望,讓我這個sba了;
那沒事,我現在補齊兩種做法;
prim:
#includeusingview codenamespace
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()
kruskal:
#includeusingview codenamespace
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;
}
第三題:
re了乙個點,? 。跑n邊spfa的人都過了,;
我們往常寫的都是一對多的spfa,那麼今天寫乙個多對一的spfa,反向建圖;
對於每個點我們要求出這個點到點x再回來的最短路,
點x到這個點的最短路只需要跑一遍以點x為源點的最短路就行了,
但是每個點到點x的最短路怎麼求呢?把邊反向之後再跑一遍以點x為源點的最短路就行了。
**;考場寫的**太醜了,所以又寫了一遍;
#includeusingview codenamespace
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;
}
分數: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...