QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#788295#7588. Monster HunterKFCCompile Error//C++981.5kb2024-11-27 16:27:162024-11-27 16:27:23

Judging History

你现在查看的是最新测评结果

  • [2024-11-27 16:27:23]
  • 评测
  • [2024-11-27 16:27:16]
  • 提交

answer

// Hydro submission #6746d7e09592d6097b868852@1732696033131
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;

int T,n;
int a[N],b[N];
vector<int> g[N];
int f[N],fa[N];

int get(int x) {
	if(fa[x]==x) return x;
	return fa[x]=get(fa[x]);
}

void dfs(int u,int fa) {
	f[u]=fa;
	for(int v:g[u]) {
		if(v==fa) continue;
		dfs(v,u);
	}
}

struct Node{
	ll a,b;
}nd[N];

bool operator<(Node u,Node v) {
	if(u.b>0 && v.b>0) return u.a>v.a;
	else if(u.b<=0 && v.b<=0) return u.a+u.b<v.a+v.b;
	return u.b<0;
}

bool operator!=(Node u,Node v) {
	return u.a!=v.a || u.b!=v.b;
}

Node operator+(Node u,Node v) {
	u.a=max(u.a,v.a-u.b);
	u.b+=v.b;
	return u;
}

priority_queue<pair<Node,int> > q;

int main() {
	scanf("%d",&T);
	while(T--) {
	    scanf("%d",&n);
	    for(int i=1;i<=n;i++) g[i].clear();
	    nd[1]={0,0};
	    for(int i=2;i<=n;i++) {
	    	scanf("%d%d",&a[i],&b[i]);
	    	b[i]-=a[i];
	    	nd[i]={a[i],b[i]};
	    	q.push({nd[i],i});
	    }
	    for(int i=1;i<n;i++) {
	    	int u,v;
	    	scanf("%d%d",&u,&v);
	    	g[u].push_back(v),g[v].push_back(u);
	    }
	    dfs(1,0);
	    for(int i=1;i<=n;i++) fa[i]=i;
	    while(!q.empty()) {
	    	int u=q.top().second;
	    	if(q.top().first!=nd[u]) {
	    		q.pop();
	    		continue;
	    	}
	    	q.pop();
	    	int v=get(f[u]);
	    	fa[u]=f[u];
	    	nd[v]=nd[v]+nd[u];
	    	if(v!=1) q.push({nd[v],v});
	    }
	    printf("%lld\n",nd[1].a);
	}
    return 0;
}

详细

answer.code: In function ‘void dfs(int, int)’:
answer.code:19:19: warning: range-based ‘for’ loops only available with ‘-std=c++11’ or ‘-std=gnu++11’ [-Wc++11-extensions]
   19 |         for(int v:g[u]) {
      |                   ^
answer.code:19:22: error: forming reference to reference type ‘std::vector<int>&’
   19 |         for(int v:g[u]) {
      |                      ^
answer.code: In function ‘int main()’:
answer.code:52:23: warning: extended initializer lists only available with ‘-std=c++11’ or ‘-std=gnu++11’ [-Wc++11-extensions]
   52 |             nd[1]={0,0};
      |                       ^
answer.code:52:23: warning: extended initializer lists only available with ‘-std=c++11’ or ‘-std=gnu++11’ [-Wc++11-extensions]
answer.code:56:33: warning: extended initializer lists only available with ‘-std=c++11’ or ‘-std=gnu++11’ [-Wc++11-extensions]
   56 |                 nd[i]={a[i],b[i]};
      |                                 ^
answer.code:56:33: warning: extended initializer lists only available with ‘-std=c++11’ or ‘-std=gnu++11’ [-Wc++11-extensions]
answer.code:57:24: warning: extended initializer lists only available with ‘-std=c++11’ or ‘-std=gnu++11’ [-Wc++11-extensions]
   57 |                 q.push({nd[i],i});
      |                        ^
answer.code:57:23: warning: extended initializer lists only available with ‘-std=c++11’ or ‘-std=gnu++11’ [-Wc++11-extensions]
   57 |                 q.push({nd[i],i});
      |                 ~~~~~~^~~~~~~~~~~
answer.code:76:33: warning: extended initializer lists only available with ‘-std=c++11’ or ‘-std=gnu++11’ [-Wc++11-extensions]
   76 |                 if(v!=1) q.push({nd[v],v});
      |                                 ^
answer.code:76:32: warning: extended initializer lists only available with ‘-std=c++11’ or ‘-std=gnu++11’ [-Wc++11-extensions]
   76 |                 if(v!=1) q.push({nd[v],v});
      |                          ~~~~~~^~~~~~~~~~~
answer.code:48:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   48 |         scanf("%d",&T);
      |         ~~~~~^~~~~~~~~
answer.code:50:18: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   50 |             scanf("%d",&n);
      |             ~~~~~^~~~~~~~~
answer.code:54:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   54 |                 scanf("%d%d",&a[i],&b[i]);
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~
answer.code:61:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   61 |                 scanf("%d%d",&u,&v);
      |                 ~~~~~^~~~~~~~~~~~~~