全部评论 67

  • d

    2025-02-22 来自 浙江

    3
  • 2025-02-22 来自 浙江

    3
  • 2024-12-14 来自 浙江

    3
  • 2024-12-14 来自 浙江

    3
  • 2024-12-14 来自 浙江

    3
  • @qi qpzc

    2025-02-22 来自 浙江

    2
  • 2024-12-14 来自 浙江

    2
  • #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    int a[N]{};
    int dp[N]{};
    vector<int>t[N];
    void dfs(int u,int fa){
        dp[u]=a[u];
        for(auto son:t[u]){
            if(son==fa)continue;
            dfs(son,u);
            if(dp[son]>0){
                dp[u]=dp[son]+dp[u];
            }
        }
        return;
    }
    int main(){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        for(int i=1;i<n;i++){
            int u,v;
            cin>>u>>v;
            t[u].push_back(v);
            t[v].push_back(u);
        }
        dfs(1,0);
        int ans=-0;
        for(int i=0;i<=n;i++)ans=max(ans,dp[i]);
        cout<<ans;
        return 0;
    }
    

    2025-05-24 来自 浙江

    1
  • #include <bits/stdc++.h>
    using namespace std;
    long long dp[2009];
    struct node{
        int w,c;
    };
    vector<node> ve[100009];
    int m,n,t;
    int main(){
        cin >> m >> n;
        for(int i = 0;i <= n;i++){
            int w,c,p;
            cin >> w >> c >> p;
            ve[p].push_back({w,c});    
        }
        for(int i = 1;i <= 100;i++){
            for(int j = m;j >=0;j--){
                for(int k = 0;k < ve[i].size();k++){
                    if(j >= ve[i][k].w) dp[j] = max(dp[j],dp[j - ve[i][k].w] + ve[i][k].c);
                }
            }
        }
        cout << dp[m];
    }
    

    2025-05-17 来自 浙江

    1
  • 本贴超过榜10了!!!!!

    2025-04-12 来自 浙江

    1
  • 3.15大根堆

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
        int n,m;
        cin >> n >> m;
        priority_queue<int> q;
        for(int i = 0;i < n;i++){
            int a,b,c;
            cin >> a >> b >> c;
            for(int j = 1;j <= m;j++){
                int tem = a * j * j + b * j + c;
                if(q.size() < m) q.push(tem);
                else if(q.top() > tem){
                    q.pop();
                    q.push(tem);
                }
                else break;
            }
        }
        vector<int> ve;
        while(q.size()){
            ve.push_back(q.top());
            q.pop();
        }
        for(int i = ve.size() - 1;i >= 0;i--) cout << ve[i] << ' ';
    }
    

    2025-03-15 来自 浙江

    1
  • 兄弟们,顶!

    2025-03-08 来自 浙江

    1
  • 2025-02-22 来自 浙江

    1
  • fd

    2025-02-22 来自 浙江

    1
  • d

    2025-02-22 来自 浙江

    1
  • d

    2025-02-22 来自 浙江

    1
  • d

    2025-02-22 来自 浙江

    1
  • d

    2025-02-22 来自 浙江

    1
  • #include<bits/stdc++.h>
    using namespace std;
    const int N=10000000;
    int n,m,x,c,l,r;
    int a[N],s[N];
    vector<int>alls;
    vector<pair<int,int> >add,query;
    int find(int x) {
        return lower_bound(alls.begin(), alls.end(), x) - alls.begin() + 1;
    }
    int main(){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            cin>>x>>c;
            add.push_back({x,c});
            alls.push_back(x);
        }
        for(int i=1;i<=m;i++){
            cin>>l>>r;
            query.push_back({l,r});
            alls.push_back(l);
            alls.push_back(r);
        }
        sort(alls.begin(), alls.end());
        alls.erase(unique(alls.begin(), alls.end()), alls.end());
        for(auto it:add){
            x=find(it.first);
            a[x]+=it.second;
        }
        for(int i=1;i<=alls.size();i++) s[i]=s[i-1]+a[i];
        for(auto it:query){
            l=find(it.first);
            r=find(it.second);
            cout<<s[r]-s[l-1]<<endl;
        }
    }
    
    

    7小时前 来自 浙江

    0
  • 考古(

    1周前 来自 重庆

    0

热门讨论