爐石亂鬥模式美滋滋啊,又頹到好晚...
上來t2先敲了樹剖,看t1發現是個思博dp,然後沒過大樣例,寫個暴力發現還是沒過大樣例!?才發現理解錯題意了,真是太菜了
然後看t3發現又要樹剖,想了想發現邊雙縮點似乎能做...結果碼來碼去比賽臨近結束才搞完,趕緊交**.
但是那台機子上的chrome似乎是個假的,開啟什麼網頁都巨慢,最後t1手殘交了份一開始的錯誤**上去,t2t3生死未卜
結果40+0+0 t1錯**居然還有40?!資料這麼水...再交遍正確**一a
t2t3下午檢查的時候發現樹剖犯了sb錯誤 還是記在了我錯誤筆記上的...太菜了
下午改t3邊雙縮點居然a了std是圓方樹的t3?!還跑了rank2?! (雖然現在xxzh巨佬是rank2
而且第一發交的樹剖還是有錯的.這資料無力吐槽了
晚上碼t2,結果至今卡死在70 tle三點,然而那台老年機都跑過了我也不知道咋回事
分析思博dp,\(f[i][j]\)表示當前使用第\(j\)輕功種走到\(i\)這個點的最短時間
\(f[i][j]=min(f[i-a[j]][p]+v[j]+[j!=p] \times w)\)
預處理一下非法情況就好了
**
/*
code by ryecatcher
*/inline char gc()
template inline void read(t &x)
const int maxn=505;
const ll inf=1e17;
int n,k,q;
ll v[maxn];
int a[maxn];
bool fob[maxn][105];
bool ok[maxn][105];
ll w,f[maxn][105];
namespace bf
for(ri i=1;i<=k;i++)
else dfs(now+a[i],i,c+v[i]+w);
} return ;
} void main()
}int main()
memset(fob,0,sizeof(fob));
memset(ok,0,sizeof(ok));
read(q);
while(q--)
for(ri i=0;i<=n;i++)
int t=0;
for(ri i=0;i<=k;i++)if(!fob[0][i])f[0][i]=0;
for(ri i=0;i<=n;i++)
if(flag)ok[i][j]=1;
}} }
if(n<=15)
for(ri i=1;i<=n;i++)
}} }
ll ans=inf;
for(ri i=1;i<=k;i++)ans=min(ans,f[n][i]);
if(ans==inf)puts("-1");
else printf("%lld\n",ans);
return 0;
}
精巧的樹剖,詢問時將所有點按\(dfs\)序排序
欽定當前公共\(lca\)
\(x\),對於排序後第\(i\)個點和\(i-1\)號點的lca \(y\),如果\(y\)在\(x\)子樹中,那麼計算\(i\)到\(y\)路徑貢獻(不包括\(y\)),否則根據dfs序排序後的性質, \(y\)就比\(x\)高明,將\(y\)設為公共\(lca\),計算\(fa[x]\)到\(i\)號點路徑貢獻
然後一直卡在70分。。。以後能用樹狀陣列再也不用線段樹了
/*
code by ryecatcher
*/inline char gc()
#define gc getchar
template inline void read(t &x)
const int maxn=200005;
const int inf=0x7fffffff;
int n,q;
int que[10000005],cnt=0;
struct edgeedge[maxn<<1];
int h[maxn],num_edge=1;
inline void add_edge(int f,int to)
ll w[maxn];
int dep[maxn],fa[maxn],dfn[maxn],top[maxn],size[maxn],son[maxn],tot=0,rnk[maxn];
void dfs_1(int now)
return ;
}void dfs_2(int now,int t)
}int l,r,t;
ll dta,ans=0;
ll s[maxn<<2];
inline void add()
inline ll sum(int x)
inline ll calc(int l,int r)
bool cmp(int a,int b)
inline void query_path(int x,int y)
inline void solve()
x=que[1],ans=w[x];
for(ri i=2;i<=cnt;i++)
else
} printf("%lld\n",ans);
return ;
}int main()
#define gc getchar
template inline void read(t &x)
const int maxn=200005;
const int inf=0x7fffffff;
int n,m,q;
ll w[maxn],val[maxn];
struct edgeedge[maxn<<1];
struct sese[maxn<<1];
int h[maxn],num_edge=1;
inline void add_edge(int f,int to)
int sh[maxn],num_se=1;
inline void add_se(int f,int to)
namespace tree
void update(int now,int l,int r)
int mid=(l+r)>>1;
if(t<=mid)update(now<<1,l,mid);
else update(now<<1|1,mid+1,r);
up(now);
return ;
} ll ans=inf;
void query(int now,int l,int r)
int mid=(l+r)>>1;
if(l<=mid)query(now<<1,l,mid);
if(middfn[y])std::swap(x,y);
l=dfn[x],r=dfn[y];
query(1,1,n);
return ;
} void main()
else}}
return; }}
int inb[maxn],cnt=0;
multiset mib[maxn];
int dep[maxn],rnk[maxn],fa[maxn],dfn[maxn],tot=0,size[maxn],son[maxn],top[maxn];
void dfs_1(int now)
void update(int now,int l,int r)
int mid=(l+r)>>1;
if(t<=mid)update(now<<1,l,mid);
else update(now<<1|1,mid+1,r);
up(now);
return ;
}ll ans=inf;
void query(int now,int l,int r)
int mid=(l+r)>>1;
if(l<=mid)query(now<<1,l,mid);
if(middfn[y])std::swap(x,y);
l=dfn[x],r=dfn[y];//puts("wtf");
//printf("%d %d %d %d\n",x,y,l,r);
query(1,1,cnt);
return ;
}int low[maxn],dd[maxn],pc=0;
bool bri[maxn<<1];
void tarjan(int now,int id)
} else if(i!=(id^1))low[now]=min(low[now],dd[v]);
} return ;
}void pre_dfs(int now,int fa)
return ;
}bool fg=0;
void pre_ck(int now,int fa)
pre_ck(v,now);
} return ;
}int main()
pre_ck(1,0);
if(!fg)
memset(vis,0,sizeof(vis));
for(ri i=1;i<=n;i++)if(!dd[i])tarjan(i,0);
for(ri i=1;i<=n;i++)
} for(ri i=1;i<=n;i++)
} }//printf("--%d--\n",cnt);
dep[1]=1,fa[1]=0;
tot=0;
dfs_1(1);
dfs_2(1,1);
build(1,1,cnt);
read(q);
char opt[5];
while(q--)
else
} }return 0;
}
NOIP2018模擬賽2018 10 18 輕功
description 題目背景 尊者神高達進入了基三的世界,作為乙個 mmorpg 做任務是必不可少的,然而跑地圖卻令人十分不爽。好在基三可以使用輕功,但是尊者神高達有些手殘,他決定用梅花樁練習輕功。題目描述 一共有 n 個木樁,要求從起點 0 開始,經過所有梅花樁,恰好到達終點 n,尊者神高達一...
NOIP2018模擬賽2018 10 18 開荒
description 題目背景 尊者神高達作為乙個萌新,在公升級路上死亡無數次後被乙隻大黃嘰帶回了師門。他加入師門後發現有無窮無盡的師兄弟姐妹,這幾天新副本開了,尊者神高達的師門作為乙個 pve師門,於是他們決定組織一起去開荒。題目描述 師門可以看做以 1 為根的一棵樹,師門中的每乙個人都有一定的...
NOIp2018模擬賽三十六
好久沒打模擬賽了。今天一樣是兩道國集,一道bzoj題 成績 13 0 95 108 a題開始看錯題了。導致樣例都沒看懂,結果xfz提醒我後我理解了乙個我自認為正確的題意 事實證明我和xfz都錯了qwq 然後瞎打了乙個線段樹,結果只有13分。c題一看就是乙個大平衡樹,開始手打了100 行發現自己肯定調...