非常短的 fread 读入挂

#include<bits/stdc++.h>
#define ll long long
using namespace std; 
const int maxn=100005;
const int BUF=30000000;
char Buf[BUF],*buf=Buf;
inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}//一句话解决
int t,n,m;
int fa[maxn];
bool book[maxn];
int main()
{
    //freopen("in.txt","r",stdin);
    fread(Buf,1,BUF,stdin);//重点
    read(t);
    while(t--)
    {
        read(n); read(m);
        for(int i=2;i<=n;i++)
        {
            int x;
            read(x);
            fa[i]=x;
        }
        memset(book,0,sizeof book);
        int num=0;
        for(int i=n;i;i--)
        {
            if(!book[i])
            book[fa[i]]=1;
            else
            num++;
            if(num*2>=m)break;
        }
        int ans;
        if(m<=num*2)ans=(m+1)/2;
        else
        ans=(m-num*2)+num;
        printf("%d\n",ans );

    }
    return 0;
}

posted @ 2017-09-19 21:18  黑码的博客  阅读(89)  评论(0编辑  收藏  举报