以下是我的代码,但是在通过uva测试是time limit exceeded, 不知道是什么原因,而且我自己测试了几个数据都是对的。
[cpp] #include #include #include #include #include #include using namespace std; string Erdos="Erdos, P."; string Scenario="Scenario "; string Infinity="infinity"; map Scientists; void loopFind(map > map_name,vector parters,vector lines,int value){ if(parters.size()<=0)return; for(int i=0;i vector parter1; vector lines1; string tmp=parters.at(i); for(map >::iterator it=map_name.begin();it!=map_name.end();++it){ vector tmpNames=it->second; vector::iterator tmpIndex=find(lines.begin(),lines.end(),it->first); vector::iterator it1=find(tmpNames.begin(),tmpNames.end(),tmp); if(tmpIndex!=lines.end())break; else if(it1!=tmpNames.end()){ for(int j=0;j string tmp1=tmpNames.at(j); if(tmp1!=tmp){ Scientists[tmp1]=value; parter1.push_back(tmp1); } } lines1.push_back(it->first); } } loopFind(map_name,parter1,lines1,value+1); } } void findScientists(map > map_name){ Scientists[Erdos]=0; vector parters; vector lines; for(map >::iterator it=map_name.begin();it!=map_name.end();++it){ vector names=it->second; vector::iterator tmp=find(names.begin(),names.end(),Erdos); if(tmp!=names.end()){ for(int i=0;i string tmp1=names.at(i); if(tmp1!=Erdos){ Scientists[tmp1]=1; parters.push_back(tmp1); } } lines.push_back(it->first); } } loopFind(map_name,parters,lines,2); } void getErdosNumber(vector paper,vector names){ int index=1; map > map_name; for(vector:: iterator it=paper.begin();it!=paper.end();++it){ string tmpString=*it; vector tmpSci; int begin=0; int end=0; if(tmpString.length()<1)continue; while(end if(tmpString[end]=='.'&&tmpString[end+1]==','&&tmpString[end+2]==' '){ string tmpName=tmpString.substr(begin,end-begin+1); tmpSci.push_back(tmpName); begin=end+3; end=begin; } else if(tmpString[end]==':'){ string tmpName=tmpString.substr(begin,end-begin); tmpSci.push_back(tmpName); break; } else ++end; } map_name[index]=tmpSci; ++index; } findScientists(map_name); } int main(){ int n=0; cin>>n; for(int i=1;i<=n;++i){ int P=0; int N=0; cin>>P>>N; if(P<1||N<1)continue; getchar(); vector paper; for(int x=0;x string tmpPaper; getline(cin,tmpPaper); paper.push_back(tmpPaper); } vector names; for(int y=0;y string tmpName; getline(cin,tmpName); names.push_back(tmpName); } Scientists.clear();