P4381 [IOI2008] Island
| #include <bits/stdc++.h> |
| using namespace std; |
| #define int long long |
| const int M=1e6+5; |
| |
| int n; |
| int h[M],ne[M<<1],e[M<<1],w[M<<1],tot=1; |
| int a[M<<1],sum[M<<1],cnt; |
| bool vis[M<<1],st[M<<1]; |
| |
| void add(int from,int to,int wi) { |
| e[++tot]=to; w[tot]=wi; ne[tot]=h[from]; h[from]=tot; |
| } |
| |
| bool dfs1(int now,int fa) { |
| if(vis[now]) { |
| st[now]=1; |
| a[++cnt]=now; |
| return 1; |
| } |
| vis[now]=1; |
| for(int i=h[now];i;i=ne[i]) { |
| if((i^1)==fa)continue; |
| if(dfs1(e[i],i)) { |
| if(st[now]==0) { |
| st[now]=1; |
| a[++cnt]=now; |
| sum[cnt]=w[i]; |
| return 1; |
| } |
| else { |
| sum[1]=w[i]; |
| return 0; |
| } |
| } |
| } |
| return 0; |
| } |
| |
| |
| int dep[M],dis; |
| void dfs2(int now,int fa) { |
| vis[now]=1; |
| for(int i=h[now];i;i=ne[i]) { |
| int to=e[i]; |
| if(to==fa||st[to])continue; |
| dfs2(to,now); |
| dis=max(dis,dep[to]+w[i]+dep[now]); |
| dep[now]=max(dep[to]+w[i],dep[now]); |
| } |
| } |
| |
| int f[M<<1]; |
| int fun(int root) { |
| cnt=dis=0; |
| dfs1(root,0); |
| |
| for(int i=1;i<=cnt;i++)sum[i]=sum[i-1]+sum[i]; |
| for(int i=1,j=cnt+1;i<=cnt;i++,j++)sum[j]=sum[j-1]+(sum[i]-sum[i-1]); |
| for(int i=1;i<=cnt;i++) { |
| dfs2(a[i],0); |
| f[i]=f[i+cnt]=dep[a[i]]; |
| } |
| |
| |
| |
| deque<int>q; |
| for(int i=1;i<=2*cnt;i++) { |
| while(!q.empty()&&q.front()+cnt<=i)q.pop_front(); |
| if(!q.empty())dis=max(dis,sum[i]-sum[q.front()]+f[i]+f[q.front()]); |
| while(!q.empty()&&f[i]-sum[i]>=f[q.back()]-sum[q.back()])q.pop_back(); |
| |
| q.push_back(i); |
| } |
| |
| return dis; |
| } |
| |
| void solve() { |
| cin>>n; |
| for(int i=1;i<=n;i++) { |
| int x,wi; |
| cin>>x>>wi; |
| add(i,x,wi); |
| add(x,i,wi); |
| } |
| int ans=0; |
| for(int i=1;i<=n;i++) { |
| if(!vis[i])ans+=fun(i); |
| } |
| cout<<ans<<endl; |
| } |
| |
| signed main() { |
| ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); |
| solve(); |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!