Why zero?
查看原帖
Why zero?
322792
Alea楼主2022/9/10 23:25

代码如下:

#include <iostream>
#include <queue>
using namespace std;
struct ration{
    int denum,numer;
    static int gcd(int a,int b){
        return a%b==0?b:gcd(b,a%b);
    }
    ration():denum(1),numer(1){
    }
    ration(int den,int num):denum(den),numer(num){
        int g=gcd(denum,numer);
        denum/=g,numer/=g;
    }
    ration operator+(const ration ano){
        ration r;
        r.denum=denum*ano.numer+numer*ano.denum;
        r.numer=ano.numer*numer;
        int g=gcd(r.numer,r.denum);
        r.denum/=g,r.numer/=g;
        return r;
    }
    ration operator/(const ration ano){
        ration r;
        r.denum=denum*ano.numer;
        r.numer=numer*ano.denum;
        int g=gcd(r.denum,r.numer);
        r.denum/=g,r.numer/=g;
        return r;
    }
};
struct node{
    int num,to[8]={};
    ration water;
}gr[10001];
int main(){
    ios::sync_with_stdio(false);
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>gr[i].num;
        for(int j=1;j<=gr[i].num;j++) cin>>gr[i].to[j];
    }
    queue<int> que;
    while(!que.empty()) que.pop();
    for(int i=1;i<=m;i++) gr[i].water=ration(1,1),que.push(i);
    for(int i=m+1;i<=n;i++) gr[i].water=ration(0,1);
    while(!que.empty()){
        int m=que.front();
        que.pop();
        for(int i=1;i<=gr[m].num;i++){
            int t=gr[m].to[i];
            gr[t].water=gr[t].water+gr[m].water/ration(gr[m].num,1);
            que.push(t);
        }
    }
    for(int i=1;i<=n;i++){
        if(gr[i].num==0){
            cout<<gr[i].water.denum<<" "<<gr[i].water.numer<<endl;
        }
    }
    return 0;
}
2022/9/10 23:25
加载中...