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 |
利用物品个数的单调性迭代,贴代码Source Code Problem: 1333 User: yzhw Memory: 3120K Time: 141MS Language: Java Result: Accepted Source Code import java.io.*; import java.util.*; class node { int type,id; BitSet s1,s2; } public class Main { /** * @param args */ static StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); static int nxtInt() throws IOException { in.nextToken(); return (int)in.nval; } static BitSet data[]=new BitSet[105]; static ArrayList<node> edge=new ArrayList<node>(); static int n,m; static boolean include(BitSet a,BitSet b) { BitSet tmp=new BitSet(1000); tmp.clear(); tmp.or(a); tmp.or(b); if(tmp.equals(a)) return true; else { a.or(tmp); return false; } } static boolean include(BitSet a,BitSet b,BitSet c,boolean type) { BitSet tmp=new BitSet(1000); tmp.clear(); if(!type) { tmp.or(b); tmp.and(c); tmp.or(a); } else { tmp.or(b); tmp.andNot(c); tmp.or(a); } if(tmp.equals(a)) return true; else { a.or(tmp); return false; } } public static void main(String[] args) throws IOException{ for(int i=0;i<data.length;i++) data[i]=new BitSet(1000); int test=nxtInt(); while((test--)!=0) { n=nxtInt(); m=nxtInt(); edge.clear(); for(int i=1;i<=m;i++) { int id=nxtInt(),nn=nxtInt(); node tt; data[id].clear(); while((nn--)!=0) switch(nxtInt()) { case -1: { int num=nxtInt(); tt=new node(); tt.s1=new BitSet(1000); tt.s1.clear(); tt.type=1; tt.id=id; while((num--)!=0) tt.s1.set(nxtInt()); edge.add(tt); break; } case -2: { tt=new node(); tt.s1=data[nxtInt()]; tt.type=1; tt.id=id; edge.add(tt); break; } case -3: { tt=new node(); tt.type=3; tt.id=id; switch(nxtInt()) { case -1: tt.s1=new BitSet(1000); tt.s1.clear(); for(int num=nxtInt();num>0;num--) tt.s1.set(nxtInt()); break; case -2: tt.s1=data[nxtInt()]; break; } switch(nxtInt()) { case -1: tt.s2=new BitSet(1000); tt.s2.clear(); for(int num=nxtInt();num>0;num--) tt.s2.set(nxtInt()); break; case -2: tt.s2=data[nxtInt()]; break; } edge.add(tt); break; } case -4: { tt=new node(); tt.type=4; tt.id=id; switch(nxtInt()) { case -1: tt.s1=new BitSet(1000); tt.s1.clear(); for(int num=nxtInt();num>0;num--) tt.s1.set(nxtInt()); break; case -2: tt.s1=data[nxtInt()]; break; } switch(nxtInt()) { case -1: tt.s2=new BitSet(1000); tt.s2.clear(); for(int num=nxtInt();num>0;num--) tt.s2.set(nxtInt()); break; case -2: tt.s2=data[nxtInt()]; break; } edge.add(tt); break; } } } //start while(true) { boolean flag=false; for(node tt:edge) switch(tt.type) { case 1: if(include(data[tt.id],tt.s1)) continue; else flag=true; break; case 3: if(include(data[tt.id],tt.s1,tt.s2,false)) continue; else flag=true; break; case 4: if(include(data[tt.id],tt.s1,tt.s2,true)) continue; else flag=true; break; } if(!flag) break; } //print for(int i=1;i<=m;i++) { System.out.print(i); for(int j=1;j<=n;j++) if(data[i].get(j)) System.out.print(" "+j); System.out.println(); } } } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator