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 |
Me,Too!In Reply To:求救 Posted by:yc5_yc at 2012-08-04 20:32:06 > // ) ) // ) ) / / // ) ) // ) ) // ) ) > //___/ / // / / / / // / / //___/ / // > / ____ / // / / / / // / / / ___ ( // ____ > // // / / / / // / / // | | // / / > // ((___/ / ((___/ / () ((___/ / // | | ((____/ / > #include <cstdio> > #include <string.h> > #include <vector> > #include <map> > #include <algorithm> > #include <string> > #include <iostream> > using namespace std; > const int NMax=30; > int N,L1,L2,connect[NMax]; > bool ok[NMax],sta[NMax]; > map<string,int> ID1,ID2; > map<int,string> rev1,rev2; > map<int,bool> State; > bool G[NMax][NMax]; > bool DFS(int a) { > sta[a]=1; > for(int j=1;j<=N;j++) if(G[a][j]){ > if(!connect[j]) { > connect[j]=a; > ok[a]=1; > return 1; > }else if(!sta[connect[j]] && DFS(connect[j])) { > ok[a]=1; > connect[j]=a; > return 1; > } > } > return 0; > } > int sth() { > for(int i=1;i<=N;i++) connect[i]=0; > for(int i=1;i<=N;i++) ok[i]=0; > for(int i=1;i<=N;i++) { > for(int j=1;j<=N;j++) if(G[i][j]){ > if(!connect[j]) { > connect[j]=i; > ok[i]=1; > break; > } > } > } > int ret=0; > for(int i=1;i<=N;i++) { > for(int j=1;j<=N;j++) sta[j]=0; > if(!ok[i] && DFS(i)) ret++; > } > return ret; > } > bool cmp(int a,int b) { > return rev1[a]<rev1[b]; > } > int main() > { > string tmp; > char buf[NMax],buf2[NMax]; > scanf("%d",&N); > for(int i=1;i<=N;i++) { > scanf("%s",buf); > int len=strlen(buf);tmp.clear(); > for(int j=0;j<len;j++) tmp.push_back(buf[j]); > ID2[tmp]=++L2;rev2[L2]=tmp; > } > for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) G[i][j]=1; > while(scanf("%s",buf),(buf[0]!='Q')) { > scanf("%s",buf2); > int len=strlen(buf2);tmp.clear(); > for(int i=0;i<len;i++) tmp.push_back(buf2[i]); > if(buf[0]=='M') { > int ID=ID2[tmp]; > int Maxn=-1; > for(map<int,bool>::iterator p=State.begin();p!=State.end();p++) { > if(!p->second) G[ID][p->first]=0; > else if(p->first>Maxn) Maxn=p->first; > } > for(int i=Maxn+1;i<=N;i++) G[ID][i]=0; > continue; > } > if(ID1[tmp]==0) {ID1[tmp]=++L1;rev1[L1]=tmp;} > int ID=ID1[tmp]; > if(buf[0]=='E') State[ID]=1; > else if(buf[0]=='L') State[ID]=0; > } > //puts("dsdfsdf"); > int R[NMax]; > for(int i=1;i<=N;i++) { > R[i]=-1; > for(int j=1;j<=N;j++) if(G[j][i]){ > G[j][i]=0; > if(sth()<N) { > R[i]=j; > G[j][i]=1; > 、、puts("Here"); > break; > } > G[j][i]=1; > } > } > for(int i=1;i<=N;i++) { > if(R[i]!=-1) cout <<rev1[i]<<':'<<rev2[R[i]]<<endl; > else cout <<rev1[i]<<':'<<"???"<<endl; > } > while(1)getchar(); getchar(); > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator