2016 ACM/ICPC Asia Regional Dalian Online(2题)

来源:互联网 发布:软件安装管理器下载 编辑:程序博客网 时间:2024/05/10 06:50

5873 Football Game

这题只要找出所有不符合的条件的,然后置ok=false就可以了。

但是这题题目中标出的数据真是坑爹,所有相乘相加的地方都有可能爆long long,而且数组开100绝对不够。

////  main.cpp//  Richard////  Created by 邵金杰 on 16/9/10.//  Copyright © 2016年 邵金杰. All rights reserved.//#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=100000+10;typedef long long ll;ll score[maxn];int main(){    int t;    while(~scanf("%d",&t))    {        while(t--)        {            int n;            scanf("%d",&n);            int odd=0,c=0;            bool ok=true;            ll sum=(ll)n*(n-1);            for(int i=1;i<=n;i++)            {                scanf("%I64d",&score[i]);                if(score[i]>2*(n-1)) ok=false;                if(score[i]==0) c++;                odd+=score[i]&1;                sum-=score[i];            }            if(c>1||sum!=0||odd&1) ok=false;            if(!ok) cout<<"F"<<endl;            else cout<<"T"<<endl;        }    }    return 0;}

5876 Sparse Graph

给定一张n个点的完全图,去掉m条边,然后求出从七点到其他n-1个点的最短距离。

很明显,补图上bfs,从队列中pop出一个点,他没有与这个点相连的点留下,把其他有边相连的点dist更新加1,并push进队列,直至队列为空。

////  main.cpp//  Richard////  Created by 邵金杰 on 16/9/11.//  Copyright © 2016年 邵金杰. All rights reserved.//#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<set>using namespace std;const int maxv=200000+10;const int maxn=40000+10;const int inf=99999999;struct edge{    int u,v,next;}edge[maxn*2];int head[maxv],dist[maxv];int n,e;int cnt;int s;void add_edge(int u,int v){    edge[cnt].u=u;    edge[cnt].v=v;    edge[cnt].next=head[u];    head[u]=cnt++;}void complement_graph_bfs(){    set<int> ta,tb;    set<int>::iterator it;    for(int i=1;i<=n;i++) dist[i]=inf;    for(int i=1;i<=n;i++) if(i!=s) ta.insert(i);    dist[s]=0;    queue<int> q;    q.push(s);    while(!q.empty())    {        int now=q.front();q.pop();        for(int i=head[now];i!=-1;i=edge[i].next){            if(ta.find(edge[i].v)!=ta.end()){                ta.erase(edge[i].v);                tb.insert(edge[i].v);            }        }        for(it=ta.begin();it!=ta.end();it++) {dist[*it]=dist[now]+1;q.push(*it);}        ta.swap(tb);tb.clear();    }    for(int i=1;i<=n;i++) if(i!=s) {printf("%d%s",dist[i]==inf?-1:dist[i],i<n?" ":"");}    printf("\n");}int main(){    int t;    scanf("%d",&t);    while(t--)    {        cnt=0;        memset(head,-1,sizeof(head));        scanf("%d%d",&n,&e);        int u,v;        for(int i=0;i<e;i++){            scanf("%d%d",&u,&v);            add_edge(u,v);            add_edge(v,u);        }        scanf("%d",&s);        complement_graph_bfs();    }    return 0;}



0 0
原创粉丝点击