清理草稿纸有感
+ +前天返乡之前收拾东西,将大学三年所用的草稿纸全部丢掉了。
+ +diff --git "a/2022/10/05/SHU\351\253\230\346\225\260\346\240\241\350\265\233\344\270\255\344\270\200\351\201\223\346\235\277\351\242\230/index.html" "b/2022/10/05/SHU\351\253\230\346\225\260\346\240\241\350\265\233\344\270\255\344\270\200\351\201\223\346\235\277\351\242\230/index.html" index a96b52ed5..d1c43149a 100644 --- "a/2022/10/05/SHU\351\253\230\346\225\260\346\240\241\350\265\233\344\270\255\344\270\200\351\201\223\346\235\277\351\242\230/index.html" +++ "b/2022/10/05/SHU\351\253\230\346\225\260\346\240\241\350\265\233\344\270\255\344\270\200\351\201\223\346\235\277\351\242\230/index.html" @@ -308,14 +308,14 @@
前天返乡之前收拾东西,将大学三年所用的草稿纸全部丢掉了。
+ +++初中高中,草稿纸我一直都不舍得扔,尽可能地将草稿纸收集起来。
+
每当我回首过去,所想起的大多是痛苦的记忆。美好的瞬间在时间长河中很快便模糊了,而一些尴尬的、痛苦的、不幸的、哀伤的记忆,经常会在深夜不眠时拜访我,一遍一遍地加深印象,从而再也遗忘不掉。
+而当我翻阅堆叠的草稿纸,看着上面或青涩、或踌躇、或汹涌的思绪,便也仿佛回到了写下字迹的那刻。看着一笔一画,跟随纸上的推导,我逐步走回了遥不可忆的过去。这一瞬,心湖泛涟漪,字迹诞生的时空邻域内的回忆,通通涌现了。
+我由此可以透过漫长的时间,注视着那个少年,他的喜乐哀愁、他的幸运与不幸、他的命运我都尽收眼底。一页一页,许多遗失的记忆碎片被重新拾起,我又重温了一遍字迹所覆盖的人生。
+扔掉了这些草稿纸,可能所对应的记忆将再也没有机会再回忆起,所以一直以来都想把草稿纸尽可能地存下。但又转念一想,发现我这样的行为其实是对时间流逝的抗拒,是在怀念过去。但我不应沉湎于过去,现在和未来还有无限多的可能,如果时间都用于沉溺过去,那么最珍贵的现在也会悄悄溜走,变成无法访问的过去。
+想通了,便把大学以来的草稿纸都扔掉了。
+ +初中高中,草稿纸我一直都不舍得扔,尽可能地将草稿纸收集起来。
每当我回首过去,所想起的大多是痛苦的记忆。美好的瞬间在时间长河中很快便模糊了,而一些尴尬的、痛苦的、不幸的、哀伤的记忆,经常会在深夜不眠时拜访我,一遍一遍地加深印象,从而再也遗忘不掉。
而当我翻阅堆叠的草稿纸,看着上面或青涩、或踌躇、或汹涌的思绪,便也仿佛回到了写下字迹的那刻。看着一笔一画,跟随纸上的推导,我逐步走回了遥不可忆的过去。这一瞬,心湖泛涟漪,字迹诞生的时空邻域内的回忆,通通涌现了。
我由此可以透过漫长的时间,注视着那个少年,他的喜乐哀愁、他的幸运与不幸、他的命运我都尽收眼底。一页一页,许多遗失的记忆碎片被重新拾起,我又重温了一遍字迹所覆盖的人生。
扔掉了这些草稿纸,可能所对应的记忆将再也没有机会再回忆起,所以一直以来都想把草稿纸尽可能地存下。但又转念一想,发现我这样的行为其实是对时间流逝的抗拒,是在怀念过去。但我不应沉湎于过去,现在和未来还有无限多的可能,如果时间都用于沉溺过去,那么最珍贵的现在也会悄悄溜走,变成无法访问的过去。
想通了,便把大学以来的草稿纸都扔掉了。
]]>一开始用并查集的时候有想着得加优化不然会被卡,但真出问题了竟然一直在想代码哪里写错了,一直在查循环条件。。
未加优化代码(TLE):
#include<bits/stdc++.h>using namespace std;typedef long long ll;int n,m,k;const int N=1e5+5;struct arc{int a,b,w; }a[N];int f[N];<int>q[N]; vectorbool cmp(arc x,arc y){return x.w<y.w;}int find(int x){return x==f[x]:x:find(f[x]); }void merge(int x,int y){=find(x);y=find(y); xif(x!=y) [x]=y; f}bool judge(int x){for(int i=1;i<=n;i++) [i]=i; ffor(int i=1;i<=x;i++) (a[i].a,a[i].b); mergefor(int i=1;i<=k;i++) { int now=find(q[i][0]); for(auto x:q[i]) if(find(x)!=now) return false; } return true; }int main() {::sync_with_stdio(false); ios>>n>>m; cinfor(int i=1;i<=m;i++) >>a[i].a>>a[i].b>>a[i].w; cin>>k; cinfor(int i=1;i<=k;i++) { int x; >>x; cinfor(int j=1;j<=x;j++) { int y; >>y; cin[i].push_back(y); q} } (a+1,a+1+m,cmp); sortint l=1,r=m,ans=m; while(l<r) { int mid=(l+r)>>1; if(judge(mid)) { =mid; ans=mid; r} else =mid+1; l} <<a[ans].w<<'\n'; coutreturn 0; }
加了优化的代码(AC):
#include<bits/stdc++.h>using namespace std;typedef long long ll;int n,m,k;const int N=1e5+5;struct arc{int a,b,w; }a[N];int f[N];<int>q[N]; vectorbool cmp(arc x,arc y){return x.w<y.w;}int find(int x){return x==f[x]?x:f[x]=find(f[x]); }void merge(int x,int y){=find(x);y=find(y); xif(x!=y) [x]=y; f}bool judge(int x){for(int i=1;i<=n;i++) [i]=i; ffor(int i=1;i<=x;i++) (a[i].a,a[i].b); mergefor(int i=1;i<=k;i++) { int now=find(q[i][0]); for(auto x:q[i]) if(find(x)!=now) return false; } return true; }int main() {::sync_with_stdio(false); ios>>n>>m; cinfor(int i=1;i<=m;i++) >>a[i].a>>a[i].b>>a[i].w; cin>>k; cinfor(int i=1;i<=k;i++) { int x; >>x; cinfor(int j=1;j<=x;j++) { int y; >>y; cin[i].push_back(y); q} } (a+1,a+1+m,cmp); sortint l=1,r=m,ans=m; while(l<r) { int mid=(l+r)>>1; if(judge(mid)) { =mid; ans=mid; r} else =mid+1; l} <<a[ans].w<<'\n'; coutreturn 0; }
就差了一行代码,复杂度却差了很多。
当谨记这次的惨痛教训
int find(int x){return x==f[x]?x:f[x]=find(f[x]); }
debug了一下午,代码重写了好几遍,最后发现原来是并查集没加查询优化😀,焯!
-debug了一下午,代码重写了好几遍,最后发现原来是并查集没加查询优化😀,焯!
+摸了两道签到题就润了
-摸了两道签到题就润了
+