70分WA求调
查看原帖
70分WA求调
385869
Guderian_houjt楼主2023/10/31 22:23

最大值未取模,总和每次都取模,且都开了long long,求调

#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+10;
struct node
{
    int val;
    vector<int> ver;
};
node g[MAXN];
int n;
long long sum,maxn;
void search(int indx)
{
    queue<int> q;
    long long cnt=0,maxn1=0,maxn2=0;
    for(int i=0;i<g[indx].ver.size();i++)
    {
        int next=g[indx].ver[i];
        cnt+=g[next].val;
        q.push(g[next].val);
        if(g[next].val > maxn1)
        {
            maxn2=maxn1;
            maxn1=g[next].val;
        }
        else if(g[next].val > maxn2)
        {
            maxn2=g[next].val;
        }
    }
    maxn=max(maxn,maxn1*maxn2);
    double all=cnt*cnt;
    while(!q.empty())
    {
        int num=q.front();
        q.pop();
        all-=num*num;
    }
    //cout<<indx<<':'<<'('<<maxn1<<','<<maxn2<<") "<<all<<endl;
    sum+=(long long)all;
    sum%=10007;
}
int main()
{
    //freopen("P1351_2.in","r",stdin);
    //freopen("P1351_2.ans","w",stdout);
    cin>>n;
    for(int i=1;i<=n-1;i++)
    {
        int u,v;
        cin>>u>>v;
        g[u].ver.push_back(v);
        g[v].ver.push_back(u);
    }
    for(int i=1;i<=n;i++)
    {
        cin>>g[i].val;
    }
    /*for(int i=1;i<=n;i++)
    {
        cout<<i<<'-'<<g[i].val<<':';
        for(int j=0;j<g[i].ver.size();j++)
        {
            cout<<g[i].ver[j]<<' ';
        }
        cout<<endl;
    }*/
    for(int i=1;i<=n;i++)
    {
        search(i);
    }
    cout<<maxn<<' '<<sum%10007<<endl;
    return 0;
}
2023/10/31 22:23
加载中...