思路:一道很水的題目,隨便怎麼搞(向兩邊擴充套件或o(n)預處理)。然而我偏偏太過於自信,o(n)預處理時最後乙個區域的r忘補充了(一敲起水題來就管不住這雙手…)。
思路:一道十分有趣的dp,雖然dp很明顯,但需要找到其中的規律,結果是要字首和維護字首和…(欺負我讀書少…)卡了我超久,最後只寫了o(n^2),沒有用hash優化(o(n))。
思路:簡化題意,就是判兩條路徑是否相交。而假設兩條路徑相交,那麼以任意一條的任意端點為根,交點一定是另一條路徑的兩個端點的lca。
此時,就冒出了乙個神奇的貪心(正確性玄乎),將lca的深度從大到小排序,每個路徑經過就mark掉。
#include
#define rep(i,f,t) for(int i=(f),i##_end_=(t);i<=i##_end_;i++)
#define drep(i,f,t) for(int i=(f),i##_end_=(t);i>=i##_end_;i--)
#define n 100005
#define m 20
#define p 1000000007
#define inf 0x3f3f3f3f
#define ll long long
// ll mod
using
namespace
std;
int n,m;
int fa[m][n],dis[n];
bool mark[n];
vector
e[n];
struct node
}q[n];
//struct p_list
// }es[n];
// bool check()
// void dfs(int x,int f,int d)
// }
// void solve();
// sort(es+1,es+1+m);
// int now=1,i=1,ans=0;
// while(now<=dep)
// cout////
//}p_list;
struct p100
}void up(int &x,int step)
void dfs(int x,int f)
}void init()
sort(q+1,q+m+1);
}void solve()
cout
rep(i,1,m)scanf("%d%d",&q[i].from,&q[i].to);
// if(p_list.check())p_list.solve();
// else p100.solve();
p100.solve();
}int main()
小結:
最近幾場考得很不穩定,忽高忽低地,每次不是第1題沒ac就是第2題暴力打錯了,第3題不用說了,沒爆0就可以了…
這說明這自己的思維很不嚴謹呀!確實,第1、2題經常是沒對拍的,或者說有時候連暴力都不好寫…這又體現自己的dfs、全排列還不行呀。
2017 7 29 離線賽 總結
本著貪心的思想,我先斜著走到頂,然後直走到終點,顯然這是最優的,但是我忽視了斜著走的最後一步可以和直著走的第一步合併,我錯誤地把兩個過程分開了。假如我當時多找幾組資料來模擬說不定能找到這個錯誤,我也沒敲個暴力來對拍 因為暴力太長了 我得到的教訓是 不能肯定自己演算法的正確性是,不如敲個暴力對拍一下,...
離線賽20171006總結
這次考得還不錯,頗有些遺憾的是因為第一題我離正解已經很近了,可惜考試畢竟是考試,一開始的題目看錯沒看到相鄰的條件浪費了很多時間,到後來就沒有時間去寫正解了。這畢竟也是一種實力,不能說題目看錯失誤問題就不大。上次的考試兩個輸出只能模乙個沒看到導致少了70分。這種失誤還是太低階了,也太致命了。這種題目看...
2017 10 7離線賽總結
失分小結 估分 玄學 實際分數 300 收穫 寫題前仔細分析題目,好好思考 考試過程 第一題真的想不到,只好打個表,結果由於資料半天沒輸出來,心態 有前前後後折騰了半個小時 第二題先是打了個n n暴力,又調了半天,這時考試只剩下兩個小時 第三題思考了大約十分鐘,然後想到了正解,實現比較快,乙個小時就...