題目描述 description
切記不要加任何檔案讀寫, 本次比賽暫不支援ifndef online_judge。請互相轉告。評測機是linux
是個富有詩意的男孩。在他居住的小鎮上,有 n個村莊,由 n-1條道路連線著。這裡的生活和諧而又寧靜。
有一天 tty偶然閱讀到一篇雜誌上的文章《陽光下的向日葵》,深受感動。特別是其中一位小女孩的故事讓他記憶猶新。 於是他買來葵花籽,決定也像那位小女孩一樣,給村民播種向日葵,把美麗和陽光帶給村莊裡的每乙個人。
於是 tty決定在每次播種前選擇兩個村莊,然後從其中乙個村莊出發,在這兩個村莊的道路上的每乙個村莊(包括起始點)種上一顆向日葵,在編號 i的村莊播種在可以長出 wi個葵花籽,而且向日葵受到天神 owaski的保護,在生長過程中不會被人採摘。
若干天後,待到向日葵成熟時,tty又會以相同的路徑去採摘那些向日葵上的葵花籽, 無論是否採摘,每一次播種的向日葵都會在下一次播種前死亡。
但是有輕微強迫症的他,不會採摘比他採摘的上一朵葵花籽相等或者更少的向日葵。
而tty並不知道這些資料,只能憑著感覺開始採摘,他想在更多的向日葵上採摘葵花籽,你能告訴他可以最多採摘的向日葵棵數嗎?
題解:n個點n-1條邊顯然是一棵樹嘛,所以每個詢問求的是樹上兩點之間權值序列的lis。
考場上我先是轉有根樹,求lca然後暴力找路徑nlogn求lis(其實不需要這麼麻煩),結果爆0了。
正確的姿勢應該是離線演算法,也就是預處理出答案ans[i][j],詢問就o(1)輸出。
首先列舉每個點,dfs求出這個點與其它點的lis。這就是加點地求lis。如果這個點的權值大於棧頂元素的話直接壓棧更新答案。否則二分查詢第乙個權值大於等於它的並將其替換再維護答案。回溯回來要記得改回。這樣的時間複雜度是o(n^2logn+q)的。記得無向圖邊數要乘2。
%%%__debug大神。
#include#include#include#include#include#define inf 0x7fffffff/10
#define x first
#define y second
using namespace std;
const int maxn=4002;
int first[maxn],next[maxn],w[maxn],e=0,v[maxn],n,q=0,f[maxn];
int top=0,ans[maxn][maxn],d[maxn];
struct point
bool operator <(const point& rhs)const
else
ans[from][to]=anss;
dfs(to,u,from,anss);
if(ty)top--;
else
}}int main()
{ freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
scanf("%d",&n);
for(int i=0;i<=n;i++)first[i]=-1;
for(int i=1;i
codeVS第二次月賽 C
題目描述 description 切記不要加任何檔案讀寫,本次比賽暫不支援ifndef online judge。請互相轉告。評測機是linux jijijie是恐怖的科學怪人,他有特殊的 科技 song ci crash。dash在他的家庭農場裡擁有 n塊連續的擁有者黑色和金色混雜的 da shg...
第二次月模擬題 201604 3
題目描述 在作業系統中,資料通常以檔案的形式儲存在檔案系統中。檔案系統一般採用層次化的組織形式,由目錄 或者資料夾 和檔案構成,形成一棵樹的形狀。檔案有內容,用於儲存資料。目錄是容器,可包含檔案或其他目錄。同乙個目錄下的所有檔案和目錄的名字各不相同,不同目錄下可以有名字相同的檔案或目錄。為了指定檔案...
第二次周賽B
有乙隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房a爬到蜂房b的可能路線數。其中,蜂房的結構如下所示。input 輸入資料的第一行是乙個整數n,表示測試例項的個數,然後是n 行資料,每行包含兩個整數a和b 0sample input 21 2 3 6sample ou...