http://www.elijahqi.win/archives/815
Problem Description
有n座城市,由n-1条路相连通,使得任意两座城市之间可达。每条路有过路费,要交过路费才能通过。每条路的过路费经常会更新,现问你,当前情况下,从城市a到城市b最少要花多少过路费。
Input
有多组样例,每组样例第一行输入两个正整数n,m(2 <= n<=50000,1<=m <= 50000),接下来n-1行,每行3个正整数a b c,(1 <= a,b <= n , a != b , 1 <= c <= 1000000000).数据保证给的路使得任意两座城市互相可达。接下来输入m行,表示m个操作,操作有两种:一. 0 a b,表示更新第a条路的过路费为b,1 <= a <= n-1 ; 二. 1 a b , 表示询问a到b最少要花多少过路费。

Output
对于每个询问,输出一行,表示最少要花的过路费。
Sample Input
2 3
1 2 1
1 1 2
0 1 2
1 2 1
Sample Output
1
2
Source
FOJ有奖月赛-2012年4月(校赛热身赛)

多组数据注意清0

#include<cstdio>
#include<cstring>
#define N  55000
inline int read(){int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}while (ch<='9'&&ch>='0') {x=x*10+ch-'0';ch=getchar();}return x*f;
}
struct node{int y,next,z;
}data[N<<1];
struct node1{int left,right,l,r;long long sum;
}tree[N<<2];
inline void swap(int &x,int &y){x^=y;y^=x;x^=y;
}
int size[N],a[N],h[N],son[N],w[N],id[N],num,dep[N],fa[N],tp[N],n,son1[N],root,m;
void dfs1(int x){size[x]=1;for (int i=h[x];i;i=data[i].next){int y=data[i].y,z=data[i].z;if (fa[x]==y) continue;a[y]=z;son1[i>>1]=y;dep[y]=dep[x]+1;fa[y]=x;dfs1(y),size[x]+=size[y];if (size[y]>size[son[x]]) son[x]=y;}
}
void dfs2(int x,int top){id[x]=++num;tp[x]=top;w[num]=a[x];if (son[x]) dfs2(son[x],top);for (int i=h[x];i;i=data[i].next){int y=data[i].y;if (fa[x]==y||son[x]==y) continue;dfs2(y,y);}
}
inline void update(int x){int l=tree[x].left,r=tree[x].right;tree[x].sum=tree[l].sum+tree[r].sum;
}
void build(int &x,int l,int r){x=++num;tree[x].l=l;tree[x].r=r;if (l==r) {tree[x].left=tree[x].right=0;tree[x].sum=w[l];return;}int mid=l+r>>1;build(tree[x].left,l,mid);build(tree[x].right,mid+1,r);update(x);
}
void change(int x,int l,int v){if (!x) return;if (tree[x].l==tree[x].r){tree[x].sum=v;return;}int mid=(tree[x].l+tree[x].r)>>1;if (l<=mid) change(tree[x].left,l,v);if (l>mid) change(tree[x].right,l,v);update(x);
}
long long query(int x,int l,int r){if (!x) return 0;if (l<=tree[x].l&&r>=tree[x].r) return tree[x].sum;int mid=(tree[x].l+tree[x].r)>>1;long long tmp1=0;if (l<=mid) tmp1+=query(tree[x].left,l,r);if (r>mid) tmp1+=query(tree[x].right,l,r);return tmp1;
}
int main(){freopen("fzu2082.in","r",stdin);while (~scanf("%d%d",&n,&m)){num=1;memset(h,0,sizeof(h));memset(son,0,sizeof(son));for (int i=1;i<n;++i){int x=read(),y=read(),z=read();data[++num].y=y;data[num].z=z;data[num].next=h[x];h[x]=num;data[++num].y=x;data[num].z=z;data[num].next=h[y];h[y]=num;}dep[1]=1;num=0;dfs1(1);dfs2(1,1);num=0;build(root,1,n);for (int i=1;i<=m;++i){int op=read(),x=read(),y=read();if (op==0){change(root,id[son1[x]],y); }else{long long ans=0;while(tp[x]!=tp[y]){if (dep[tp[x]]<dep[tp[y]]) swap(x,y);ans+=query(root,id[tp[x]],id[x]);x=fa[tp[x]];}if (id[x]>id[y]) swap(x,y);if (id[x]==id[y]) {printf("%lld\n",ans);continue;}ans+=query(root,id[x]+1,id[y]);printf("%lld\n",ans);}}   }return 0;
}

fzu2082 过路费相关推荐

  1. Uva 10537 过路费

    题目链接:http://vjudge.net/contest/143062#problem/C 题意: 给定一个无向图,大写字母是城市,小写字母是村庄,经过城市交过路费为当前货物的%5,路过村庄固定交 ...

  2. Codevs 1519 过路费(Mst+Lca)

    1519 过路费 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,-,n. ...

  3. FZU 2082 过路费

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2082 题意: 有n座城市,由n-1条路相连通,使得任意两座城市之间可达.每条路有过路费,要交过路费才能通过.每 ...

  4. WIKIOI 1519 过路费

    1519 过路费 1519 过路费 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题解 题目描述 Description 在某个遥远的国家里,有 n个城市.编号 ...

  5. CODEVS——T1519 过路费

    http://codevs.cn/problem/1519/ 时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master 题解  查看运行结果 题目描述 Descript ...

  6. CodeVs1519 过路费

    题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,-,n.这个国家的政府修建了m 条双向道路,每条道路连接着两个城市.政府规定从城市 S 到城市T需要收取的过路费 ...

  7. 【codevs1519】 过路费

    题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,-,n.这个国家的政府修建了m 条双向道路,每条道路连接着两个城市.政府规定从城市 S 到城市T需要收取的过路费 ...

  8. codevs1519 过路费(最小生成树+LCA)

    1519 过路费  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master 题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,- ...

  9. 苹果收取30%过路费_你是顶是踩?

    原文链接 苹果收取30%过路费 早在5月份,苹果以安全为由要求微信关闭打赏功能,微信团队竭力沟通协商未果,最终腾讯低头.而在不久前的苹果WWDC2017大会上,苹果将从有"打赏"性 ...

最新文章

  1. 2017-2018-1 20155321 《信息安全系统设计基础》课下作业3
  2. linux x window system下载,为Ubuntu 添加 KDE X WINDOW SYSTEM
  3. CSS核心技术详解-核心概念
  4. Flowable 数据库表结构 ACT_HI_PROCINST
  5. 飞鸽传书下载2013
  6. linux下编译libyuv,linux.mk
  7. JavaScript运算符及转义字符
  8. 如何在 Ubuntu 16.10 的 Unity 8 上运行老式 Xorg 程序
  9. REST Assured 55 - JSON Schema Validation In Rest Assured
  10. TcpClient Class
  11. 学籍管理系统c语言项目作业,C语言实现学生学籍管理系统
  12. 整数(奇偶)+分数分频器的verilog实现(大合集)
  13. 微信公众号开发者原生态的servlet
  14. 什么是RS485总线?怎么使用RS485总线?一文了解清楚
  15. x10ti怎么禁用核显_第十代酷睿H性能提升了多少?8核16线程i7 10875H独家测试告诉你答案...
  16. ARM Linux下安装CH341串口驱动
  17. C语言——读取串口数据,并处理
  18. java html 双引号转义,java如何将单引号转义
  19. matlab识别黄色车牌,在网上下载了一个matlab的车牌识别,怎么将识别黄色车牌改成识别蓝色车牌,大神求解...
  20. openwrt+php+not+found,openwrt搜不到wifi

热门文章

  1. Linux创建文件的5种方式
  2. RTThread 操作系统中,编译出的程序为什么能打印出当前时间?
  3. 字节押注下沉市场,推出能赚钱的“悟空浏览器”
  4. 【电力电子技术】三相半波可控整流电路
  5. 计算机系口号8字,既牛逼又文艺的队名 计算机班级口号霸气
  6. C 中出现nan(ind)是啥意思?
  7. AcWing1014.登山
  8. Android GridLayout网格布局实现复古小米计算器
  9. mtcnn系列-1.模型原理
  10. 方法是学习和进步的捷径