社区讨论
60分求调
P7113[NOIP2020] 排水系统参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lp0jjjrx
- 此快照首次捕获于
- 2023/11/16 09:57 2 年前
- 此快照最后确认于
- 2023/11/16 13:44 2 年前
如题:
CPP#include<bits/stdc++.h>
#define int unsigned long long
#define re register int
using namespace std;
const int N=1e5+5;
int n,m,ru[N];
int mu[N],zi[N];//分母,分子
vector<int>g[N];
inline void zhi(int x,int y){
int minn=__gcd(zi[x],mu[x]);
zi[x]/=minn,mu[x]/=minn;
minn=__gcd(zi[y],mu[y]);
zi[y]/=minn,mu[y]/=minn;
}
inline void jia(int x,int y){
zhi(x,y);
zi[y]=zi[x]*mu[y]+zi[y]*mu[x];
mu[y]=mu[y]*mu[x];
zhi(x,y);
}
inline void topo(){
stack<int>s;
for(re i=1;i<=n;i++){
if(ru[i]==0)s.push(i);
}
while(!s.empty()){
int u=s.top();
s.pop();
int ss=g[u].size();
if(ss)mu[u]=mu[u]*ss;
for(auto v:g[u]){
ru[v]--;
jia(u,v);
if(ru[v]==0)s.push(v);
}
if(ss)zi[u]=0;
}
}
signed main(){
scanf("%lld%lld",&n,&m);
for(re i=1;i<=n;i++){
mu[i]=1;
int d,a;
scanf("%lld",&d);
for(re j=1;j<=d;j++){
scanf("%lld",&a);
g[i].push_back(a);
ru[a]++;
}
}
for(re i=1;i<=m;i++)zi[i]=1;
topo();
for(re i=1;i<=n;i++){
if(zi[i]!=0){
int minn=__gcd(zi[i],mu[i]);
printf("%lld %lld\n",(zi[i]/minn),(mu[i]/minn));
}
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...