求助 输入以后没输出
查看原帖
求助 输入以后没输出
181037
ysmlwudia楼主2021/2/22 14:30
#include<iostream>
#include<stdio.h>
#include<string.h>
 using namespace std;
 int n,m,ind[100005],outd[100005],last[100005],tot,p[100005],q[100005];
 int gcd(int x,int y){
	 if(x<y)swap(x,y);
	return y==0?x:gcd(y,x%y);
 }
 int lcm(int x,int y){
	 return (x*y)/gcd(x,y);
 }
 struct edge{
	 int prev,to;
 }e[200006];
 void add(int a,int b){
	 e[++tot]=edge{last[a],b};
	 last[a]=tot;
 }
 void dfs(int x){
	 for(int i=last[x];i;i=e[i].prev){
		 int y=e[i].to,lm,bei1,bei2;
		 if(outd[y]==0){
			 lm=lcm(q[x],q[y]);
			 bei1=lm/q[y];
			 bei2=lm/q[x];
			 p[y]=p[y]*bei1+p[x]*bei2;
			 q[y]=lm;//最后处理约分问题
		}
		else{
			p[y]=p[x];
			q[y]=q[x]*outd[x];
		}
		dfs(y);
	}
 }
 int main(){
//	 freopen("water.in","r",stdin);
//	 freopen("water.out","w",stdout);
	cin>>n>>m;
	 for(int i=1;i<=n;i++){
		 int d;
		 cin>>d;
		 for(int j=1;j<=d;j++){
			 int x;
			 cin>>x;
			 add(i,x);
			 outd[i]++;
			 ind[x]++;
		 }
	 }
	 for(int i=1;i<=m;i++){
		 dfs(i);
	 }
	 for(int i=1;i<=n;i++){
		 if(outd[i]==0){
			 int gc=gcd(p[i],q[i]);
			 cout<<p[i]/gc<<' '<<q[i]/gc<<endl;
		 }
	 }
	return 0 ;
 }

当时在考场上就一直这个问题,给我整的心态崩了,按照我的预算这题能拿40分的,但是就是没有输出,当时调了一个小时也没调出来,因为这个我没拿上三等奖,今天想起来求助一下各位dalao

2021/2/22 14:30
加载中...