社区讨论

萌新70pts求助

P7113[NOIP2020] 排水系统参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lo7y6zsc
此快照首次捕获于
2023/10/27 09:41
2 年前
此快照最后确认于
2023/10/27 09:41
2 年前
查看原帖
怎么改?
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int N=1e5+5;
ll n,m,tot=0,h[N],pai[N],k[N];
struct point{
	ll zi=0,mu=1;
}p[N];
struct EDGE{
	ll nxt,v;
}e[N<<1];

inline ll gcd(ll x,ll y){
	return (y==0)? x:gcd(y,x%y);
}

inline void jia(ll x,ll y){
	p[y].zi=(p[x].zi*p[y].mu) + k[x]*(p[y].zi*p[x].mu),
	p[y].mu=k[x]*p[x].mu*p[y].mu;
	ll yin=gcd(p[y].zi,p[y].mu);
	p[y].zi/=yin,p[y].mu/=yin;
}

inline void add(ll x,ll y){
	e[++tot].v=y,
	e[tot].nxt=h[x],
	h[x]=tot;
}

inline void dfs(ll x){
	if(pai[x]) return;
	for(int i=h[x];i;i=e[i].nxt){
		jia(x,e[i].v);
		dfs(e[i].v);
	}
	p[x].zi=0,p[x].mu=1;
}

int main(){
	freopen("water.in","r",stdin);
	freopen("water.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		int x;cin>>k[i];
		if(!k[i]){
			pai[i]=1;continue;
		}
		for(int j=1;j<=k[i];++j){
			cin>>x,add(i,x);
		}
	}
	for(int i=1;i<=m;++i) p[i].zi=1;
	for(int i=1;i<=m;++i){
		dfs(i);
	}
	for(int i=1;i<=n;++i){
		if(pai[i]){
			cout<<p[i].zi<<" "<<p[i].mu<<endl;
		} 
	}
	return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...