Diary(2020十一月 NOIP賽前集訓)


2020.12.03(1)

\[\Huge 1 \]

\(RP\)爆漲
剛剛把\(T4\)講了一下
好久沒有上黑板講題了對吧
感覺開心極了

明天就要出征啦
早晨得知上午要核酸檢測
下午考試
晚上整理
在ff的求助下被迫寫了一道數論推柿子
感覺針不戳
天氣還是蠻冷的
零下四度的樣子
有白霜,哈氣成霧
查了一下秦皇島零下六度,,,,
換衣服
中午回去收拾一下
17745940319

2020.12.02(2)

\[\Huge 2 \]

下雪了~

2020.12.01(3)

\[\Huge 3 \]

這個階段也結束了
自從開始集訓
幾乎沒拿過臉
這最后了可好
一下倆臉
操作拉滿
\(RP\)爆炸
這叫——土塊
沒想到沒想到
不過現在好像也沒有最一開始得到臉或者沒有臉的高興或是失落了
都不重要了
有很多話想說
但是現在還不是時候
控制住自己的情緒
別波動太大
還有三天的時間
壓制住自己
一定要控制
別放松
靜下來穩一點
開始調整心態,培養考試狀態
安安穩穩的比啥都強
\(RP++\)

媽呀,轉眼就十二月了
好快
感覺\(CSP\)剛過,\(NOIP\)就要來了
這兩天,狀態挺穩定的吧
沒啥起伏好像
保持就行保持就行

2020.11.29(6)

\[\Huge 6 \]

划水更新

2020.11.25(8)

\[\Huge 8 \]

下午一個樹剖+兩個線段樹寫了一下午
第一次打
感覺真不戳
碼量\(220\)
紀念一下
整整齊齊

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define ls (u << 1)
#define rs (ls | 1)
#define max(a, b) ({register int AA = a, BB = b; AA > BB ? AA : BB;})
#define min(a, b) ({register int AA = a, BB = b; AA < BB ? AA : BB;})
using namespace std;

inline int read(){
	int x = 0, w = 1;
	char ch = getchar();
	for(; ch > '9' || ch < '0'; ch = getchar()) if(ch == '-') w = -1;
	for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
	return x * w;
}

const int ss = 1000010;

struct node{
	int from, to, nxt, w, id;
	inline bool operator < (const node &x) const {
		return x.w > w;
	}
}edge[ss << 1], g[ss];

int head[ss], tot;
inline void add(register int u, register int v, register int w){
	edge[++tot].to = v;
	edge[tot].nxt = head[u];
	edge[tot].w = w;
	head[u] = tot;
}

int ff[ss];
inline int find(register int x){
	return ff[x] == x ? x : ff[x] = find(ff[x]);
}

bool vis[ss];
int sum, n, m, cnt;
inline void kruskal(){
	for(register int i = 1; i <= n; i++)
		ff[i] = i;
	sort(g + 1, g + 1 + m);
	for(register int i = 1; i <= m; i++){
		register int x = g[i].from;
		register int y = g[i].to;
		x = find(x), y = find(y);
		if(x == y) continue;
		ff[y] = x;
		sum += g[i].w;
		add(g[i].from, g[i].to, g[i].w);
		add(g[i].to, g[i].from, g[i].w);
		cnt++;
		vis[g[i].id] = 1;
		if(cnt == n - 1) break;
	}
}

int fa[ss], dep[ss], size[ss], son[ss];
inline void dfs(register int u, register int f){
	size[u] = 1;
	fa[u] = f;
	for(register int i = head[u]; i; i = edge[i].nxt){
		register int v = edge[i].to;
		if(v == f) continue;
		dep[v] = dep[u] + 1;
		dfs(v, u);
		size[u] += size[v];
		if(size[v] > size[son[u]]) son[u] = v;
	}
}

int dfn[ss], top[ss], tim, val[ss];
inline void dfs(register int u, register int t, register int w){
	top[u] = t;
	dfn[u] = ++tim;
	val[tim] = w;
	if(son[u]){
		for(register int i = head[u]; i; i = edge[i].nxt){
			register int v = edge[i].to;
			if(v == son[u]){
				dfs(v, t, edge[i].w);
				break;
			}
		}
	}
	for(register int i = head[u]; i; i = edge[i].nxt){
		register int v = edge[i].to;
		if(v != fa[u] && v != son[u])
			dfs(v, v, edge[i].w);
	}
}

int tr[ss], lazy[ss];
inline void build(register int u, register int l, register int r){
	if(l == r){
		tr[u] = val[l];
		return;
	}
	register int mid = l + r >> 1;
	build(ls, l, mid);
	build(rs, mid + 1, r);
	tr[u] = max(tr[ls], tr[rs]);
}

inline int query(register int u, register int l, register int r, register int s, register int t){
	if(s <= l && t >= r) return tr[u];
	register int mid = l + r >> 1;
	if(t <= mid) return query(ls, l, mid, s, t);
	if(s > mid) return query(rs, mid + 1, r, s, t);
	return max(query(ls, l, mid, s, t), query(rs, mid + 1, r, s, t));
}

inline int Query(register int u, register int v){
	register int res = 0;
	while(top[u] != top[v]){
		if(dep[top[u]] < dep[top[v]]) swap(u, v);
		res = max(res, query(1, 1, n, dfn[top[u]], dfn[u]));
		u = fa[top[u]];
	}
	if(u == v) return res;
	if(dep[u] > dep[v]) swap(u, v);
	res = max(res, query(1, 1, n, dfn[u] + 1, dfn[v]));
	return res;
}

inline void build_tr(register int u, register int l, register int r){
	tr[u] = 1000000000;
	lazy[u] = -1;
	if(l == r) return;
	register int mid = l + r >> 1;
	build_tr(ls, l, mid);
	build_tr(rs, mid + 1, r);
}

inline void update(register int u, register int w){
	tr[u] = min(tr[u], w);
	if(lazy[u] == -1) lazy[u] = w;
	else lazy[u] = min(lazy[u], w);
}

inline void pushdown(register int u){
	if(lazy[u] == -1) return;
	update(ls, lazy[u]);
	update(rs, lazy[u]);
	lazy[u] = -1;
}

inline void change(register int u, register int l, register int r, register int s, register int t, register int w){
	if(s <= l && t >= r){
		update(u, w);
		return;
	}
	register int mid = l + r >> 1;
	pushdown(u);
	if(s <= mid) change(ls, l, mid, s, t, w);
	if(t > mid) change(rs, mid + 1, r, s, t, w);
	tr[u] = min(tr[ls], tr[rs]);
}

inline void modify(register int u, register int v, register int w){
	while(top[u] != top[v]){
		if(dep[top[u]] < dep[top[v]]) swap(u, v);
		change(1, 1, n, dfn[top[u]], dfn[u], w);
		u = fa[top[u]];
	}
	if(u == v) return;
	if(dep[u] > dep[v]) swap(u, v);
	change(1, 1, n, dfn[u] + 1, dfn[v], w);
}

inline int Query_tr(register int u, register int l, register int r, register int w){
	if(l == r) return tr[u];
	register int mid = l + r >> 1;
	pushdown(u);
	if(w <= mid) return Query_tr(ls, l, mid, w);
	else return Query_tr(rs, mid + 1, r, w);
}

int ans[ss];
signed main(){
	freopen("easy.in", "r", stdin);
	freopen("easy.out", "w", stdout);
	n = read(), m = read();
	for(register int i = 1; i <= m; i++){
		g[i].id = i;
		g[i].from = read();
		g[i].to = read();
		g[i].w = read();
	}
	kruskal();
	dfs(1, 0);
	dfs(1, 1, 0);
	build(1, 1, n);
	for(register int i = 1; i <= m; i++){
		if(!vis[g[i].id])
			ans[g[i].id] = Query(g[i].from, g[i].to);
	}
	memset(tr, 0, sizeof tr);
	build_tr(1, 1, n);
	for(register int i = 1; i <= m; i++){
		if(vis[g[i].id]) continue;
		register int u = g[i].from;
		register int v = g[i].to;
		modify(u, v, g[i].w);
	}
	for(register int i = 1; i <= m; i++){
		if(!vis[g[i].id]) continue;
		register int u = g[i].from;
		register int v = g[i].to;
		if(dep[u] < dep[v]) swap(u, v);
		ans[g[i].id] = Query_tr(1, 1, n, dfn[u]);
	}
	for(register int i = 1; i <= m; i++)
		printf("%d\n", ans[i]);
	return 0;
}

泥谷好驗證

2020.11.24(10)

\[\Huge 10 \]

學軍信友杯

20b-835
92ce880ad9971c1b

2020.11.23(11)

\[\Huge 11 \]

線段樹解鎖新錯誤

隨機數水到將近\(500ops\)

今天考場沒掛分
考試最后應該去看看\(T1\)
\(T2\)玄學算法打了太久了
不過還好\(120pts\)全得到了

階段總結

整體感覺考完csp回來考場狀態好了很多
考場上心態很平穩
沒有說看到題目沒有思路就直接扔了跑路的情況
心也比較靜,想出來就敢慢慢寫
不擔心一道題花費時間太久耽誤其他的題目的話
反而時間會比較充裕
而且不會出現寫了一半慌里慌張不寫了的情況
即使寫到一半發現前面有東西推錯了也不會特別慌
重來一遍也是妥妥的能調過
上午大考的話基本上每天保持在九點半到十點鍾能把暴力打個差不多
剩下時間磨一磨還能磨出個正解或者更高的部分分來
還是心要放平靜

上次說完嘗試思路的事情后來考試就一直在試
效果不錯
最起碼最近幾天的考試考場上能不掛分了
甚至每天都能想出來一個正解
不僅僅停留在暴力上
感覺比之前進步很多
上次老姚說完改題自己改代碼實現要死磕啥的后來也在堅持
果不其然代碼實現能力有提升
之前考場上有思路但是覺得太麻煩不敢寫的現在不管多復雜總能實現出來了

下午改題覺得稍有點吃力
多少有點改不動
四個題大部分能獨立改出來兩道半的樣子
其余的就沒有頭緒不了了之了(實在是不會)
剩下時間學點隨機算法SA啥的(狗頭)
因為考場上打RAND的能力一直在飛漲(也不知道為啥有時候還能拿到意想不到的分)
還有鞏固鞏固前一段學的網絡流(這玩意真的有用么……)
有時候要求寫個題解就簡單總結一下
感覺時間還是挺緊的
最好能保持這個狀態吧

唯一的煩惱就是
晚上忽然開始失眠
今天是第三天了
特困想睡覺睡不着
有時候就坐一會兒
也不知道為啥
躺下去就特別累但是就是睡不着
翻來覆去得到十一點多有時候到十二點
第二天早晨困的一批
但是還好一上考場想題就清醒點
雖然有時候也會犯會兒困
迷惑也不知道咋辦……

暫時好像想不到什么要說的了吧
以上
RP++

2020.11.22(12)

\[\Huge 12 \]

晚上考試巨他媽的開心啊啊啊啊啊啊
考場上過的題屈指可數
哦哈哈哈哈

\(T1\)看着一個小於6的表硬是把正解推出來了
雖然有點繞遠有點走彎路有點麻煩時間有點長
但是畢竟獨立想出來了一道題
很滿足\(~~反正T2也不會~~\)
考試快結束的時候暴力才把這個\(7\)跑出來

最起碼對了心里吃了定心丸
增加了\(AC\)的信心
狂喜hahahahahahahahahaha~~~


最近兩天一直在下雨有點冷
上羽絨服了QWQ
昨天上午考試狀態真不戳
九點半打完暴力之后
就手玩了一會\(T2\)測數據發現了一些規律
然后yy想了一下這\(40pts\)線性遞推一下不就行了?
打完\(40pts\)之后想到干嘛要一個一個乘
快速冪一次乘多個不就\(A\)了?
當時激動的不行
最后時間緊,測了一組極限數據報段錯誤
但是實在沒時間看哪里錯了就交上去了
果不其然RE滾粗
字符串數組按照部分分開的,,,
真的掛成前\(40pts\)
改過就A了
雖然掛了\(60\)但是還是挺開心的
畢竟好久沒在考場上想到正解而且碼出來了雖然碼量及其小,最終還是打掛了
注重代碼細節
加快打暴力的速度
打部分分如果能夠開到更大的空間也盡量開
避免如果要打更高的分數爆出空間
以上

2020.11.19(15)

\[\Huge 15 \]

改題改累了
考試總結
注意事項

名稱
總分 goods merge string wall
HE-00050 90 10 30 0 50

回歸之后的第一場模擬賽
估分90,實際得分90
雖然分不高
但是沒掛分
挺知足的
\(T2\)考場上能做出來的
但是迫於\(T4\)占用調試時間太長了
而且最終也沒調出來這個該死的暴力
導致\(T2\)沒時間寫正解了
注重代碼實現能力+考場時間分配

焚化課結束了
回歸集訓

宿舍暖氣烤的太厲害了
后半夜嗓子根本受不了
睡不好
md夜里暖和是真暖和
早晨起來困是真困

2020.11.16

改了四天終於調過了緊急疏散
費勁
建邊好ex
不想上焚化課啊啊啊啊
焚化課不講武德,用騙,用偷襲,焚化我這個16歲的少年
耗子尾汁

2020.11.13

emmmm
爬起來了
還是剛一下緊急疏散吧……
今天似乎又要開始上焚化課了啊啊啊
希望上課不要睡死過去

2020.11.12

今天寫了一天網絡流
感覺針不戳
中午睡覺腦子里面全是網絡流的邊亂指
竟然給我指醒了\(QwQ\)
緊急疏散建圖好ex啊
想完思路就不想寫了。。。

第五道網絡流
[NOI2006]最大獲利(網絡最大流+最小割)

\(ICPC\)就這???
[ICPC-Beijing 2006]狼抓兔子
題庫竟然卡了\(Dinic\)
沒錯是郭郭加強了數據
順便把\(spfa\)也卡掉了
昨天說好了把卡\(Dinic\)的出題人掛在樹上的
是不是線下物理解決一下\(QWQ\)

非常舒適的切掉了士兵占領
板子非常熟練了,鍛煉建邊的思維

下午來了狀態極佳
一個小時切星際爭霸
自己寫過開心極了~

一上午調過了蜥蜴

早晨回來被老姚叫走喝茶談人生
\(RP++\)

網絡最大流\(Dinic\)加上無用點優化

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#define min(a, b) ({register int AA = a, BB = b; AA < BB ? AA : BB;})
#define inf 0x7fffffff
using namespace std;

inline int read(){
	int x = 0, w = 1;
	char ch = getchar();
	for(; ch > '9' || ch < '0'; ch = getchar()) if(ch == '-') w = -1;
	for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
	return x * w;
}

const int ss = 10010;

struct node{
	int to, nxt, w;
}edge[ss * 20];

int head[ss], tot = 1;
inline void add(register int u, register int v, register int w){
	edge[++tot].to = v;
	edge[tot].nxt = head[u];
	edge[tot].w = w;
	head[u] = tot;
}

int dis[ss], cur[ss];
int n, m, d, s, t;
bool vis[ss];
queue<int> q;
inline bool spfa(register int s){
	for(register int i = 0; i <= n; i++)
		vis[i] = 0, dis[i] = 0x3f3f3f3f, cur[i] = head[i];
	dis[s] = 0;
	q.push(s);
	while(!q.empty()){
		register int u = q.front();
		q.pop();
		vis[u] = 0;
		for(register int i = head[u]; i; i = edge[i].nxt){
			register int v = edge[i].to;
			if(dis[v] > dis[u] + 1 && edge[i].w){
				dis[v] = dis[u] + 1;
				if(!vis[v]) q.push(v), vis[v] = 1;
			}
		}
	}
	return dis[t] != 0x3f3f3f3f;
}

long long ans;
inline int dfs(register int u, register int flow){
	register int res = 0, used = 0;
	if(u == t) return ans += flow, flow;
	for(register int i = cur[u]; i; i = edge[i].nxt){
		cur[u] = i;
		register int v = edge[i].to;
		if(dis[v] == dis[u] + 1 && edge[i].w){
			if(res = dfs(v, min(flow - used, edge[i].w))){
				used += res;
				edge[i].w -= res;
				edge[i ^ 1].w += res;
				if(used == flow) break;
			}
		}
	}
	return used;
}

inline long long dinic(){
	register long long minflow = 0;
	while(spfa(s)) dfs(s, 0x7fffffff);
	return ans;
}

signed main(){
	n = read(), m = read(), s = read(), t = read();
	for(register int i = 1; i <= m; i++){
		register int u = read(), v = read(), w = read();
		add(u, v, w);
		add(v, u, 0);
	}
	printf("%lld\n", dinic());
}

今天破天荒的不考試??
學習網絡流+改題
碼了三遍\(Dinic\)最大流終於能夠一遍過了
舒服~

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#define min(a, b) ({register int AA = a, BB = b; AA < BB ? AA : BB;})
using namespace std;

inline int read(){
	int x = 0, w = 1;
	char ch = getchar();
	for(; ch > '9' || ch < '0'; ch = getchar()) if(ch == '-') w = -1;
	for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
	return x * w;
}

const int ss = 10010;

struct node{
	int to, nxt, w;
}edge[ss * 20];

int head[ss], tot = 1;
inline void add(register int u, register int v, register int w){
	edge[++tot].to = v;
	edge[tot].nxt = head[u];
	edge[tot].w = w;
	head[u] = tot;
}

int dis[ss], cur[ss];
int n, m, s, t;
bool vis[ss];
queue<int> q;
inline bool spfa(register int s){
	for(register int i = 1; i <= n; i++)
		dis[i] = 0x3f3f3f3f, cur[i] = head[i], vis[i] = 0;
	dis[s] = 0;
	q.push(s);
	while(!q.empty()){
		register int u = q.front();
		q.pop();
		vis[u] = 0;
		for(register int i = head[u]; i; i = edge[i].nxt){
			register int v = edge[i].to;
			if(dis[v] > dis[u] + 1 && edge[i].w){
				dis[v] = dis[u] + 1;
				if(!vis[v]) q.push(v), vis[v] = 1;
			}
		}
	}
	return dis[t] != 0x3f3f3f3f;
}

inline int dfs(register int u, register int flow){
	register int res = 0;
	if(u == t) return flow;
	for(register int i = cur[u]; i; i = edge[i].nxt){
		cur[u] = i;
		register int v = edge[i].to;
		if(dis[v] == dis[u] + 1 && edge[i].w){
			if(res = dfs(v, min(flow, edge[i].w))){
				edge[i].w -= res;
				edge[i ^ 1].w += res;
				return res;
			}
		}
	}
	return 0;
}

long long maxflow;
inline long long dinic(){
	register long long minflow = 0;
	while(spfa(s)){
		while(minflow = dfs(s, 0x7fffffff))
			maxflow += minflow;
	}
	return maxflow;
}

signed main(){
	n = read(), m = read(), s = read(), t = read();
	for(register int i = 1; i <= m; i++){
		register int u = read(), v = read(), w = read();
		add(u, v, w);
		add(v, u, 0);
	}
	printf("%lld\n", dinic());
	return 0;
}

2020.11.11

今天雙十一
但是不知道買啥,,,
隨便吧
嗝,新\(Mac\)真香
上午開始了真正的\(NOIP\)模擬賽
沒錯我可以\(A\)掉一道題
但是本來不會\(dfs\)判環還迎着頭皮上
於是掛成零分
下午來了隨便碼了一個\(tarjan\)就過了
剛剛跟小坤一起\(yy\)\(dfs\)判環現在拍掛了
正在調~

2020.11.10

CSP結束了
回來搞學考課程
昨天,,,
一天上了7節地理
半天的時間把必修二整整一本書講完了
建議改成地理奧賽
真就百家飯喂大的信息奧賽
一節課換一個老師
每一個學科的所有老師輪着給上課
感覺針不戳~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM