這個題其實乙個月前就想寫了、但當時看到環基樹就嚇跑了、、
但其實這個題除了環要找出來單獨跑一邊dp、、別的就真的沒了
先把環找出來(由於只有乙個環,所以直接dfs)
然後對環上的每個點做一遍子樹的dp
然後把環拆下來,列舉第乙個點的狀態、從這個點左邊一直做到這個點右邊
然後就沒了、、注意它可能有多個子集、、
乙個dp被我活生生寫成了碼農題、別的題解都40行、但還是調過了、碼力看來還是可以的、 碼:
#include#includeusing namespace std;
#include#define n 1000005
#define ll long long
vectorv[n],vv;
ll fu[n],h[n],f[n][3],g[n][3],n,a[n],x,ans,j,yici,d[n];
bool vis[n];
void dfs(int o,int fa,int dis)
h[x]=1;
vv.push_back(x);
} }else dfs(nd,o,dis+1);
}}void dp(int o,int fa)
lin+=max(g[vv[1]][1],g[vv[1]][0]);
//第乙個取
ll lin2=0;
lin2+=f[vv[0]][1];
g[vv[vv.size()-1]][0]=f[vv[vv.size()-1]][0];
g[vv[vv.size()-1]][1]=0;
for(j=vv.size()-2;j>0;j--)
lin2+=g[vv[1]][0];
ans+=max(lin,lin2);
} } printf("%lld",ans);
}
記錄2017 9 7CVTE嵌入式軟體筆試程式設計題
1.輸入乙個字串,輸出字串中最後出現次數最少的字元,如果都有重複,則輸出最後出現字元最多的字元,例如輸入 abbccdffgg 輸出 d 輸入 aaabbbccddee 輸出 b include include include include include using namespace std ...
2017 10 6 單詞 思考記錄
少有的會做的ac自動機題 這個題是匹配模式串 所以就不需要匹配的過程,只需要建出fail樹,然後直接拓撲 由於每次加進去乙個單詞,這個單詞的每乙個字母都有可能作為最後乙個字母影響他的失配,所以詞路徑上的每個字母都需要標記 然後失配是保證了字尾相等,所以如果失配是詞,則這個點的所有繼承過來的標記都可以...
2017 10 28 壓縮 思考記錄
這個題首先要知道m和r不是棧的搭配,是貪心的搭配,就是向左找到第乙個m。如 abababab cdcdcdcd abababab cdcdcdcd abrrcdcdcdcdr mabrrcdrr r 然後如果你想使用r來重複兩個相同區間就必須保證m出現在最左端,或整串都不出現 所以f 左端點 右端點...