zoukankan      html  css  js  c++  java
  • Lorenzo Von Matterhorn(map的用法)

    http://www.cnblogs.com/a2985812043/p/7224574.html

    解法:这是网上看到的

    因为要计算u->v的权值之和,我们可以把权值放在v中,由于题目中给定的u、v特性,我们可以从最后一个v开始倒回来每次除以2,然后把权值加起来就好了,注意输入的区间大小值

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <map>
     4 using namespace std;
     5 #define LL long long
     6 map<LL, LL>node;
     7 int q, com;
     8 LL u, v, w;
     9 int main()
    10 {
    11     while(~scanf("%d", &q)){
    12         while(q--){
    13             scanf("%d", &com);
    14             if(com==1){
    15                 scanf("%lld%lld%lld", &u, &v, &w);
    16                 while(u!=v){
    17                     if(u>v){
    18                         node[u]+=w;
    19                         u/=2;
    20                     }
    21                     else{
    22                         node[v]+=w;
    23                         v/=2;
    24                     }
    25                 }
    26             }
    27             else{
    28                 scanf("%lld%lld", &u, &v);
    29                 LL ans=0;
    30                 while(u!=v){
    31                     if(u>v){
    32                         ans+=node[u];
    33                         u/=2;
    34                     }
    35                     else{
    36                         ans+=node[v];
    37                         v/=2;
    38                     }
    39                 }
    40                 printf("%lld
    ", ans);
    41             }
    42         }
    43     }
    44     return 0;
    45 }

    http://www.cnblogs.com/fightfordream/p/5672915.html

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <iostream>
     5 #include <map>
     6 using namespace std;
     7 #define N 10005
     8 map<long long,long long> mp;
     9 
    10 void add(long long a,long long w)
    11 {
    12     if(mp.find(a)==mp.end()) mp[a]=0;
    13     mp[a]+=w;
    14 }
    15 
    16 long long val(long long a)
    17 {
    18     if(mp.find(a)==mp.end()) return 0;
    19     return mp[a];
    20 }
    21 
    22 int main()
    23 {
    24     int t;
    25     cin>>t;
    26     while(t--){
    27         int s;
    28         cin>>s;
    29         if(s==1){
    30             long long u,v,w;
    31             cin>>u>>v>>w;
    32             while(u!=v){
    33                 //对节点进行更新,直到更新到根节点
    34                 if(u>v){
    35                     add(u,w);
    36                     u>>=1;
    37                 }
    38                 else{
    39                     add(v,w);
    40                     v>>=1;
    41                 }
    42             }
    43         }
    44         else{
    45             long long u,v,ans=0;
    46             cin>>u>>v;
    47             while(v!=u){
    48                 //查询
    49                 if(u>v){
    50                     ans+=val(u);
    51                     u>>=1;
    52                 }
    53                 else{
    54                     ans+=val(v);
    55                     v>>=1;
    56                 }
    57             }
    58             cout<<ans<<endl;
    59         }
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    监听器、过滤器
    最详细的Log4j使用教程
    Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
    Unsupported major.minor version 52.0
    jdk安装
    数据库建表
    SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
    面向对象中的常用魔术方法
    面向对象中的修饰关键词
    面向对象三大特性之二--【继承】
  • 原文地址:https://www.cnblogs.com/thunder-110/p/8585834.html
Copyright © 2011-2022 走看看