看题解写题解???
  • 板块灌水区
  • 楼主ZSYhaouuan
  • 当前回复7
  • 已保存回复7
  • 发布时间2025/1/5 13:00
  • 上次更新2025/1/5 18:43:15
查看原帖
看题解写题解???
1385996
ZSYhaouuan楼主2025/1/5 13:00

这个题解 疑似抄袭 这一篇题解

理由:

  1. 代码极其相似

这是他写的题解的代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+5;
vector<ll> G[N];
queue<ll> q;
ll topu[N],to[N],ans[N];
ll n,x,y,answer;
int main(){
	cin>>n;
	for(int i=1;i<n;i++){
		cin>>x>>y;
		G[x].push_back(y);
		topu[y]++;
	}
	for(int i=1;i<=n;i++) if(!topu[i]) q.push(i);
	while(!q.empty()){//拓扑排序
		ll x=q.front();
		q.pop();
		for(auto y:G[x]){
			to[y]+=(to[x]+1);//更新数组
			ans[y]+=(to[x]+ans[x]+1);
			topu[y]--;
			if(!topu[y]) q.push(y);
		}
	}
	for(int i=1;i<=n;i++) answer+=ans[i];//累加求答案
	cout<<answer;
	return 0;
}

这是原题解代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define FOR(i, a, b) for(int i = (a); i <= (b); ++ i)
#define pb push_back

const int N = 2e5 + 10;
int n, outd[N], g[N], f[N];
vector<int> G[N];
queue<int> que;

signed main() {
	scanf("%lld", &n);
	FOR(i, 1, n - 1) {
		int u, v;
		scanf("%lld%lld", &u, &v);
		G[v].pb(u), outd[u] ++;
	}
	
	FOR(i, 1, n) if(!outd[i]) que.push(i);
	while(que.size()) {
		int u = que.front(); que.pop();
		for(int v: G[u]) {
			g[v] += g[u] + 1;
			f[v] += f[u] + g[u] + 1;
			if(!(-- outd[v])) que.push(v);
		}
	}
	
	int ans = 0;
	FOR(i, 1, n) ans += f[i];
	printf("%lld\n", ans);
	
	return 0;
}

可以看到,代码结构完全一致,大家可以看一下。

  1. 思路解释:

原题解写了很多数学公式来阐释答案由来。让我们看看他怎么写的:

那怎么去更新两个数组呢?非常简单!

并没有原理解释。像极了自己把题解代码AC了又想写题解又不知道原理的样子。

  1. 发布时间:

没什么说的。他的题解比原题解要晚,不会矛盾。

  1. 提交信息

这个。能看出,他第一遍提交就过了,而且代码就是题解代码。第二次AC只是增加了注释而已。

最后可以看到,他的思路解释就是原题解的思路解释的最后一自然段,甚至都没有原因的。

举报

2025/1/5 13:00
加载中...