++ 和-- 写反,果断WA0 |
|
题目 2109 [NOIP 2015]运输计划
2017-11-09 12:05:42
|
|
最后一个点实在是太凶残了QAQ
只能打表T-T 待我来填此坑(先撑过NOIP2017再说)
题目 2109 [NOIP 2015]运输计划
2017-11-06 12:49:20
|
|
20170713:最后一个点太凶残了,卡常卡不过去就打了个表,结果成了rank1,我也是醉了。。。
20171103UPD:终于不用打表AC了。。顺便吐槽:经过本zz的多次测试,不加任何优化时间效率是最高的。。。 如果有人有好的优化方法可以告诉我。。 |
|
题目 2109 [NOIP 2015]运输计划
2017-10-29 11:42:35
|
|
mdzz,我的最小值本来定的-(1<<31)+1,结果w一个点,换成-0x7fffffff才A,注意啊各位!!!
|
|
vector果然太慢,于是我果断选择打表(逃)。
题目 2109 [NOIP 2015]运输计划
2017-10-12 17:51:38
|
|
咦哲学符号哪里去了……
题目 2109 [NOIP 2015]运输计划
2017-10-07 10:21:46
|
|
学会树剖了哈哈
|
|
不过不打表不剪枝也能无压力跑过。。。
|
|
需要卡常数吗?加个剪枝不就完了吗?
|
|
来丫的多开点时限 最后一个点极凶无比
我卡了两年了。。两秒也行啊
题目 2109 [NOIP 2015]运输计划
2017-08-14 11:45:32
|
|
题目 2109 [NOIP 2015]运输计划
2017-07-10 12:37:22
|
|
果然我人傻自带大常数= =
|
|
题目 2109 [NOIP 2015]运输计划
2017-06-12 06:24:09
|
|
O(≧口≦)O,打个暴力生抡了90分,还有两个点死活过不去啊w(゚Д゚)w
|
|
大神求助,为何 wa 2个点(transport8 & transport11),不胜感激!!!!!!!!!!
#include<iostream> #include<cstdio> #include<cstring> #define MAXN 300005 using namespace std; int n,m,tim,l=0,r=0,mid,ent; int dr[MAXN],head[MAXN],task[MAXN][3]; int bs[MAXN][2],sz[MAXN],fa[MAXN],top[MAXN],tid[MAXN],deep[MAXN]; int aa[MAXN]; struct edge{int to,next,w;}e[MAXN*2]; void find_heavy(int u,int f,int ds) { sz[u]=1; fa[u]=f; dr[u]=ds; deep[u]=deep[fa[u]]+1;int ms=0; for(int i=head[u],v=e[i].to,w=e[i].w;i;i=e[i].next,v=e[i].to,w=e[i].w) { if(v==f) continue; find_heavy(v,u,ds+w); sz[u]+=sz[v]; if(sz[v]>ms) ms=sz[v],bs[u][0]=v,bs[u][1]=w; } } void connet_heavy(int u,int tp,int val) { top[u]=tp; tid[u]=++tim; aa[tim]=val; if(!bs[u][0]) return; connet_heavy(bs[u][0],tp,bs[u][1]); for(int i=head[u],v=e[i].to,w=e[i].w;i;i=e[i].next,v=e[i].to,w=e[i].w) { if(v==fa[u]||v==bs[u][0]) continue; connet_heavy(v,v,w); } } void find_lca_op_dis() { for(int i=1;i<=m;i++) { int a=task[i][0],b=task[i][1],ta=top[a],tb=top[b],lca; while(ta!=tb) { if(deep[ta]<deep[tb]) swap(ta,tb),swap(a,b); a=fa[ta]; ta=top[a]; } if(deep[a]<deep[b]) lca=a; else lca=b; task[i][2]=dr[task[i][0]]+dr[task[i][1]]-2*dr[lca]; r=max(r,task[i][2]); } } bool check() { int d[MAXN],o=0,k=0,maxn=0,mbxn=0; memset(d,0,sizeof(d)); for(int i=1;i<=m;i++) if(task[i][2]>mid) { o++; mbxn=max(mbxn,task[i][2]); int a=task[i][0],b=task[i][1],ta=top[a],tb=top[b]; while(ta!=tb) { if(deep[ta]<deep[tb]) swap(ta,tb),swap(a,b); d[tid[ta]+1]++; d[tid[a]+1]--; a=fa[ta]; ta=top[a]; } if(deep[a]>deep[b]) swap(a,b); d[tid[a]+1]++; d[tid[b]+1]--; } for(int i=1;i<=n;i++) { k+=d[i]; if(o==k) maxn=max(maxn,aa[i]); } if(mbxn-maxn<=mid) return true; return false; } void work() { while(l<r) { mid=(l+r)/2; if(check()) r=mid; else l=mid+1; } printf("%d",r); } int main() { scanf("%d%d",&n,&m); for(int a,b,c,i=1;i<n;i++) { scanf("%d%d%d",&a,&b,&c); e[++ent].to=a; e[ent].next=head[b]; e[ent].w=c; head[b]=ent; e[++ent].to=b; e[ent].next=head[a]; e[ent].w=c; head[a]=ent; } for(int i=1;i<=m;i++) scanf("%d%d",&task[i][0],&task[i][1]); deep[1]=1; find_heavy(1,0,0); connet_heavy(1,1,0); find_lca_op_dis(); work(); return 0; }
题目 2109 [NOIP 2015]运输计划
2017-03-27 09:44:21
|
|
用vector存的图,死活过不去最后一点。。。果断打表QAQ
题目 2109 [NOIP 2015]运输计划
2016-11-13 15:31:28
|
|
出题人将在此教你重视cpu cache的做人道理
|
|
fread 2.24秒
普通快读 3.07秒 低空掠过=_= 如此凶残之卡常 自带大常数 |