UVA 10507 - Waking up brain

来源:互联网 发布:git mac客户端下载 编辑:程序博客网 时间:2024/05/22 16:52

每次选择一个有3个wake的邻节点的节点,标记为wake,将其计数器减清零,并且将这个节点的所有没醒着的邻节点计数器加一


#include <iostream>#include <map>#include <vector>#include <cstdio>#include <cstring>#include <memory.h>using namespace std;#define MAX 130map<int,map<int,int> >g;char awaked[10];int cnt[MAX],n,m;bool wake[MAX];int main(){while(scanf("%d",&n)==1){scanf("%d",&m);int ccnt=n-3,ans=0,f=1;memset(cnt,0,sizeof(cnt));memset(wake,0,sizeof(wake));g.clear();scanf("%s",awaked);for(int i=0;i<m;++i){char buf[5];scanf("%s",buf);g[buf[0]][buf[1]]=g[buf[1]][buf[0]]=1;}for(int i=0;i<3;++i){map<int,int>::iterator it=g[awaked[i]].begin();wake[awaked[i]]=1;for(;it!=g[awaked[i]].end();++it){if(!wake[it->first])cnt[it->first]++;}}while(ccnt>0){int flag=0;map<int,map<int,int> >::iterator it=g.begin();vector<int>v;for(;it!=g.end();++it){if(cnt[it->first]>=3){v.push_back(it->first);flag=1;cnt[it->first]=0;ccnt--;}}if(flag==0){f=0;break;}for(int i=0;i<v.size();++i){map<int,int>::iterator it=g[v[i]].begin();for(;it!=g[v[i]].end();++it){if(!wake[it->first])cnt[it->first]++;}}ans++;}if(f)printf("WAKE UP IN, %d, YEARS\n",ans);else printf("THIS BRAIN NEVER WAKES UP\n");}return 0;}


原创粉丝点击