题解(A91.排水系统)
2024-10-06 18:14:07
发布于:四川
2阅读
0回复
0点赞
点个赞吧!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
typedef unsigned long long ull;
int n,m,ans,cnt;
struct node{
__int128 x,y;
}t[400005];
vector<int> ve[400005];
void dfs(int x,int p,int q){
if(ve[x].size()==0){
t[x].x=t[x].x*q+p*t[x].y;
t[x].y=t[x].y*q;
__int128 powe=__gcd(t[x].x,t[x].y);
if(powe==0) return;
t[x].x/=powe;
t[x].y/=powe;
return ;
}
for(int i=0;i<ve[x].size();i++){
dfs(ve[x][i],p,q*ve[x].size());
}
}
void print(__int128 x)
{
if(x < 0)
{
x = -x;
putchar('-');
}
if(x > 9) print(x/10);
putchar(x%10 + '0');
}
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++){
ve[i].clear();
__int128 pp=__int128(0);
__int128 po=__int128(1);
t[i].x=pp;
t[i].y=po;
}
for(int i=1;i<=n;i++){
int k;
cin>>k;
for(int j=0;j<k;j++){
int z;
cin>>z;
ve[i].push_back(z);
}
}
for(int i=1;i<=m;i++){
dfs(i,1,1);
}
for(int i=1;i<=n;i++){
if(t[i].x!=0){
print(t[i].x);
cout<<" ";
print(t[i].y);
cout<<endl;
}
}
return 0;
}
这里空空如也
有帮助,赞一个