MLE 80?
查看原帖
MLE 80?
182691
SisconHL楼主2020/12/9 21:37
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1e5+10;
LL gcd(LL a,LL b){
	if(a>b)swap(a,b);
	if(a==0)return b;
	return gcd(b%a,a);
}
struct frac{LL a;LL b;frac():b(1){}};
frac Val(frac x){frac f;f.a=x.a/gcd(x.a,x.b);f.b=x.b/gcd(x.a,x.b);return f;}
frac jia(frac x,frac y){frac f;f.a=x.a*y.b+x.b*y.a;f.b=x.b*y.b;return f;}
frac cha(frac x,frac y){frac f;f.a=x.a*y.a;f.b=x.b*y.b;return f;}
struct Node{
	vector<int> son;int x;
	frac val(){frac f;f.a=1;f.b=x;return f;}
}node[maxn];
int N,M;bool fin[maxn];frac S[maxn],X;
queue<int> q;
void dfs(int cur,frac v){
	v=Val(v);if(fin[cur]){S[cur]=jia(v,S[cur]);return;}
	int sz=node[cur].x;
	for(int i=0;i<sz;i++){
		if(!fin[node[cur].son[i]])dfs(node[cur].son[i],cha(v,node[cur].val()));
		else{
			X=jia(S[node[cur].son[i]],cha(v,node[cur].val()));
			S[node[cur].son[i]]=Val(X);
		}
	}
	return;
}
void solve(){
	for(int i=1;i<=N;i++)if(node[i].x==0)fin[i]=true;
	frac f;f.a=f.b=1;
	for(int i=1;i<=M;i++)dfs(i,f);
	for(int i=1;i<=N;i++)if(fin[i])S[i]=Val(S[i]),printf("%lld %lld\n",S[i].a,S[i].b);
}
int main(){
	//freopen("water.in","r",stdin);freopen("water.out","w",stdout);
	scanf("%d%d",&N,&M);int tmp;
	for(int i=1;i<=N;i++){
		scanf("%d",&node[i].x);
		for(int j=0;j<node[i].x;j++)scanf("%d",&tmp),node[i].son.push_back(tmp);
	}
	solve();
	//fclose(stdin);fclose(stdout);
	return 0;
}

先前洛谷90,信奥题库100,CCF 卡我到了80?

但为啥 MLE 啊

2020/12/9 21:37
加载中...