Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:分享两组关键性数据:In Reply To:分享两组关键性数据: Posted by:MyTalent at 2013-05-08 23:24:07 > 6 6 > A<F > B<D > C<E > F<D > D<E > E<F > output: > Inconsistency found after 6 relations. > > 5 5 > A<B > B<C > C<D > D<E > E<A > output: > Sorted sequence determined after 4 relations: ABCDE > > 第一个例子讲述的是:矛盾和多选,优先判断是否矛盾 > 第二个例子讲述的是:在矛盾之前如果有成功的,算是成功 > > 我的代码比较笨,解决第一个用例用的是进行二次测试的办法: > #include <cstdio> > #include <cstring> > #define rep(i,repstt,repend) for(int i=repstt;i<repend;i++) > #define INIT(a,b) memset(a,b,sizeof(a)) > int into[30],ans[30],n,m; > char tmpa,tmpb; > bool f[30][30]; > int topo_sort(int sz,int work){ > INIT(into,0); > rep(i,0,sz)rep(j,0,sz) > if(f[i][j]) > into[j]++; > rep(i,0,sz){ > int head,ok=0; > rep(j,0,sz) > if(!into[j]){ > head=j; > ok++; > } > if(!ok) > return 0; > if(work==1&&ok>1) > return -1; > rep(k,0,sz) > if(f[head][k]) > into[k]--; > ans[i]=head; > into[head]=-1; > } > return 1; > } > int main(){ > int res,i; > while(scanf("%d%d",&n,&m)&&(n+m)){ > bool ud=1; > INIT(f,0); > for(i=0;i<m;i++){ > scanf(" %c %*c %c",&tmpa,&tmpb); > f[tmpa-'A'][tmpb-'A']=1; > res=topo_sort(n,0); > if(res)//二次测试 > res=topo_sort(n,1); > if(res==1){ > printf("Sorted sequence determined after %d relations: ",i+1); > rep(j,0,n)putchar(ans[j]+'A'); > printf(".\n"); > rep(j,i+1,m)scanf(" %*c %*c %*c"); > ud=0; > break; > }else if(!res){ > printf("Inconsistency found after %d relations.\n",i+1); > rep(j,i+1,m)scanf(" %*c %*c %*c"); > ud=0; > break; > } > } > if(ud)printf("Sorted sequence cannot be determined.\n"); > } > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator