米哈游笔试D卷编程C题

#include <iostream>
#include <vector>
using namespace std;
const int N = 2e5 + 5;
using ll = long long;
struct node {
    int n;
    ll deep;
    ll ans;
};
vector<node> ans;
vector<vector<int>> g;

void dfs(int root, int fa = -1) {
    for (auto &to : g[root]) {
        if (to == fa) continue;
        dfs(to, root);
        ans[root].n += ans[to].n;
        ans[root].deep += ans[to].deep + ans[to].n;
    }
    ans[root].n += 1;
    for(auto &to : g[root]) {
        if (to == fa) continue;
        ans[root].ans += (ans[to].n + ans[to].deep) * (ans[root].n - ans[to].n) + ans[to].ans;
    }
}
int main() {
    int n, m;
    cin >> n >> m;
    g.resize(n + 1);
    ans.resize(n + 1);
    for (int i = 1; i < n; i++) {
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    dfs(1);
    while(m--) {
        int x;
        cin >> x;
        cout << ans[x].ans << endl;
    }
    return 0;
}

笔试的时候 ans[root].ans += (ans[to].n + ans[to].deep) * (ans[root].n - ans[to].n) + ans[to].ans;忘记加ans[to].ans了,人麻了。

#米哈游笔试#
全部评论

相关推荐

头像
04-28 11:57
三峡大学 C++
T1&nbsp;#include&nbsp;&lt;bits/stdc++.h&gt;using&nbsp;namespace&nbsp;std;#define&nbsp;int&nbsp;long&nbsp;longvoid&nbsp;solve(){int&nbsp;n,k;cin&gt;&gt;n&gt;&gt;k;vector&lt;int&gt;&nbsp;a(n+1);for(int&nbsp;i=1;i&lt;=n;i++)cin&gt;&gt;a[i];sort(a.begin(),a.end());int&nbsp;r2=n+1,r1=n+1;int&nbsp;ans=0;for(int&nbsp;i=1;i&lt;=n;i++){r1--;ans+=a[r1];if(i%k==0){r2--;ans+=a[r2];}cout&lt;&lt;ans&lt;&lt;&quot;&nbsp;&quot;;}cout&lt;&lt;endl;}signed&nbsp;main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int&nbsp;T=1;cin&gt;&gt;T;while(T--)solve();return&nbsp;0;}T2#include&nbsp;&lt;bits/stdc++.h&gt;using&nbsp;namespace&nbsp;std;#define&nbsp;int&nbsp;long&nbsp;longvoid&nbsp;solve(){int&nbsp;n;cin&gt;&gt;n;vector&lt;int&gt;&nbsp;a(n+2),b(n+2),c(n+2);for(int&nbsp;i=1;i&lt;=n;i++){char&nbsp;c;cin&gt;&gt;c;if(c=='A')a[i]++;else&nbsp;b[i]++;a[i]+=a[i-1];b[i]+=b[i-1];}int&nbsp;ans=0;for(int&nbsp;i=n;i&gt;=1;i--)c[i]=max(c[i+1],b[i]+a[n]-a[i]);for(int&nbsp;i=0;i&lt;=n;i++){//&nbsp;cout&lt;&lt;a[i]+c[i+1]&lt;&lt;&quot;&nbsp;&quot;;ans=max(ans,a[i]+c[i+1]-b[i]);}cout&lt;&lt;n-ans&lt;&lt;endl;}signed&nbsp;main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int&nbsp;T=1;cin&gt;&gt;T;while(T--)solve();return&nbsp;0;}T3#include&nbsp;&lt;bits/stdc++.h&gt;using&nbsp;namespace&nbsp;std;int&nbsp;seg[800005];void&nbsp;build(int&nbsp;id,int&nbsp;l,int&nbsp;r,vector&lt;int&gt;&amp;&nbsp;a){if(l==r){seg[id]=a[l];return;}int&nbsp;mid=(l+r)/2;build(id*2,l,mid,a);build(id*2+1,mid+1,r,a);seg[id]=__gcd(seg[id*2],seg[id*2+1]);}int&nbsp;find(int&nbsp;id,int&nbsp;l,int&nbsp;r,int&nbsp;q,int&nbsp;num){//&nbsp;cout&lt;&lt;l&lt;&lt;&quot;&nbsp;&quot;&lt;&lt;r&lt;&lt;&quot;&nbsp;&quot;&lt;&lt;seg[id]&lt;&lt;endl;if(r&lt;=q){int&nbsp;g=__gcd(seg[id],num);//&nbsp;cout&lt;&lt;g&lt;&lt;endl;if(num==g)return&nbsp;-1;if(l==r)return&nbsp;l;int&nbsp;mid=(l+r)/2;int&nbsp;f=find(id*2+1,mid+1,r,q,num);//&nbsp;cout&lt;&lt;f&lt;&lt;endl;if(f!=-1)return&nbsp;f;return&nbsp;find(id*2,l,mid,q,num);}int&nbsp;mid=(l+r)/2;int&nbsp;f=-1;if(q&gt;=mid+1)f=find(id*2+1,mid+1,r,q,num);if(f!=-1)return&nbsp;f;return&nbsp;find(id*2,l,mid,q,num);}void&nbsp;solve(){int&nbsp;n;cin&gt;&gt;n;vector&lt;vector&lt;int&gt;&gt;&nbsp;r(n+2),o(n+2);vector&lt;int&gt;&nbsp;a(n+1);for(int&nbsp;i=1;i&lt;=n;i++)cin&gt;&gt;a[i];build(1,1,n,a);int&nbsp;cur=a[1];//&nbsp;cout&lt;&lt;find(1,1,5,3,4);for(int&nbsp;i=2;i&lt;=n;i++){cur=__gcd(cur,a[i]);int&nbsp;q=i-1,g=a[i];vector&lt;pair&lt;int,int&gt;&gt;&nbsp;jl;//&nbsp;cout&lt;&lt;find(1,1,n,i-1,g)&lt;&lt;&quot;&nbsp;&quot;;//&nbsp;int&nbsp;cnt=0;while(g!=cur){int&nbsp;re=find(1,1,n,q,g);if(re==-1)break;g=__gcd(g,a[re]);//&nbsp;cout&lt;&lt;g&lt;&lt;&quot;&nbsp;&quot;&lt;&lt;cur&lt;&lt;&quot;&nbsp;&quot;;//&nbsp;cnt++;//&nbsp;if(cnt==100)break;jl.push_back({re,g});}//&nbsp;cout&lt;&lt;cnt&lt;&lt;&quot;&nbsp;&quot;;//&nbsp;cout&lt;&lt;endl;jl.push_back({0,1});for(int&nbsp;j=0;j&lt;jl.size()-1;j++){o[jl[j].first].push_back(a[i]-jl[j].second);r[jl[j+1].first+1].push_back(a[i]-jl[j].second);//&nbsp;cout&lt;&lt;jl[j+1].first+1&lt;&lt;&quot;&nbsp;&quot;&lt;&lt;jl[j].first&lt;&lt;&quot;&nbsp;&quot;&lt;&lt;a[i]-jl[j].second&lt;&lt;endl;}}map&lt;int,int&gt;&nbsp;mp;long&nbsp;long&nbsp;ans=0;for(int&nbsp;i=1;i&lt;n;i++){for(auto&nbsp;num:r[i]){mp[num]++;//&nbsp;cout&lt;&lt;num&lt;&lt;&quot;&nbsp;&quot;;}//&nbsp;cout&lt;&lt;endl;ans+=mp[a[i]];for(auto&nbsp;num:o[i]){mp[num]--;//&nbsp;cout&lt;&lt;num&lt;&lt;&quot;&nbsp;&quot;;}//&nbsp;cout&lt;&lt;endl;}cout&lt;&lt;ans&lt;&lt;endl;}signed&nbsp;main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int&nbsp;T=1;cin&gt;&gt;T;while(T--)solve();return&nbsp;0;}
米哈游笔试
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务