codevs1027
来源:互联网 发布:2016淘宝怎么注册 编辑:程序博客网 时间:2024/06/05 03:38
题目地址:http://codevs.cn/problem/1027/
代码:
varw:array[1..20,1..20] of boolean;ID:array[1..20] of string;nm,ans:array[1..20] of string;room2,used:array[1..20] of boolean;r,tr:array[1..20] of longint;N,i,j,p,tmp:longint;cc:char;ss:string;function checkname(s:string):longint;vari:longint;beginfor i:=1 to p do if nm[i]=s then exit(i);inc(p);nm[p]:=s;checkname:=p;end;function checkID(s:string):longint;vari:longint;beginfor i:=1 to n do if ID[i]=s then exit(i);end;function dfs(p:longint):boolean;vari:longint;beginif p=0 then exit(false);for i:=1 to n do if w[p,i] and not(used[i]) then begin used[i]:=true; if (r[i]=0) or dfs(r[i]) then begin r[i]:=p; exit(true); end; end;dfs:=false;end;beginreadln(N);for i:=1 to n do for j:=1 to n do w[i,j]:=true;for i:=1 to n-1 dobegin setlength(ID[i],20); read(cc);j:=0; while cc<>' ' do begin inc(j); ID[i][j]:=cc; read(cc); end; setlength(ID[i],j);end;readln(ID[n]);readln(ss);while ss<>'Q' dobegin case ss[1] of 'E':begin delete(ss,1,2); room2[checkname(ss)]:=true; end; 'L':begin delete(ss,1,2); room2[checkname(ss)]:=false; end; 'M':begin delete(ss,1,2); tmp:=checkID(ss); for i:=1 to n do if not room2[i] then begin w[tmp,i]:=false; //writeln('del ',tmp,' ',i); //debug end; end; end; readln(ss);end;for i:=1 to n dobegin fillchar(used,sizeof(used),0); dfs(i);end;for i:=1 to n do if r[i]>0 then begin tr:=r; w[r[i],i]:=false; r[i]:=0; fillchar(used,sizeof(used),0); if dfs(tr[i]) then ans[i]:=nm[i]+':???' else ans[i]:=nm[i]+':'+ID[tr[i]]; r:=tr; w[r[i],i]:=true; end;for i:=1 to n-1 do for j:=i+1 to n do if ans[i]>ans[j] then begin ss:=ans[i]; ans[i]:=ans[j]; ans[j]:=ss; end;for i:=1 to n do writeln(ans[i]);end.
0 0