NBUT 1554 Lord of Minecraft

来源:互联网 发布:尚学堂java马士兵全套 编辑:程序博客网 时间:2024/04/26 11:58

比赛的时候数据错了、、好坑爹、越想越复杂、、、→_→

其实就是一次BFS求出层次图、然后判断、、、

#include<stdio.h>#include<string.h>#include<string>#include<map>#include<queue>#include<algorithm>using namespace std;#define INF 0x7fffffff#define LL long long intint n,m;const int N=10005;int k;struct node{    int to,next,val;}edge[N];int head[N];int level[N];void init(){    k=0;    memset(head,-1,sizeof(head));}void add(int x,int y,int val){    edge[k].to=y;    edge[k].val=val;    edge[k].next=head[x];    head[x]=k++;}void bfs(int start){    queue<int>q;    level[1]=1;    q.push(1);    while(!q.empty())    {        int now=q.front();        q.pop();        for(int i=head[now];i!=-1;i=edge[i].next)        {            int s=edge[i].to;            level[s]=level[now]+1;            q.push(s);        }    }}int main(){    while(scanf("%d%d",&n,&m)!=EOF)    {    map<string,int>M;    M["Hungar"]=1;    char str1[15];    char str2[15];    int cnt=2;    init();    for(int i=1;i<=n;i++)    {        scanf("%s%s",str1,str2);        if(M[str1]==0)M[str1]=cnt++;        if(M[str2]==0)M[str2]=cnt++;        add(M[str2],M[str1],1);    }    bfs(1);    int ans=0;    for(int i=1;i<=m;i++)    {        scanf("%s%s",str1,str2);        if(level[M[str1]]<=level[M[str2]])ans++;    }    printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击