首页 > 代码库 > 2014年12程序设计竞赛A题Team
2014年12程序设计竞赛A题Team
input:
输入一个整数你(n<=100000)和m,表示M的团队共有n个队员,有m次操作(m<100000)
接下来n-1行,输入两个数A和B,表示A和B是好盆友关系;
接下来m行,有如下操作(队员编号1——n):
D x y 表示x与y绝交
Q x y Q表示查询x是否是y盆友的盆友的盆友的。。。。。的盆友。
Output
对于Q操作,x是y的盆友的盆友的。。。。就输出Yes,否则输出No。
Sample Input
6 5
1 3
3 5
1 2
3 4
2 6
D 1 3
Q 1 6
Q 1 4
D 3 5
Q 1 4
sample output
自己算
解题思路:
比赛的时候觉得我的方法会超时,就没有做。
代码实现(没有提交过,不知道是否超时):
#include<stdio.h>int cont[100000][100000]={0};//记录队员之间的关系//cont[i][j]如果为1,表示i,j是好盆友;为1表示i,j不是好盆友int teamN,opN;//队员人数,操作次数void D(int x,int y){ cont[x][y]=0; cont[y][x]=0;}int flag;void Q(int x,int y){ if(x==y){ flag=1; return; } int i; for(i=1;i<=teamN;i++) if(cont[i][x]){ cont[i][x]=0; cont[x][i]=0; Q(i,y); cont[i][x]=1; cont[x][i]=1; }}int main(){ scanf("%d%d",&teamN,&opN); int i; int team1,team2;//操作,队员1,队员2 char opra; for(i=1;i<teamN;i++){//记录已有的好盆友 scanf("%d%d",&team1,&team2); cont[team1][team2]=1; cont[team2][team1]=1; } getchar(); for(i=0;i<opN;i++){ scanf("%c%d%d",&opra,&team1,&team2); // printf("%c\n",opra); getchar(); // printf("%c\n",opra); flag=0; if(opra==‘D‘) D(team1,team2); else if(opra==‘Q‘){ // printf("\\"); Q(team1,team2); if(flag) printf("Yes\n"); else printf("No\n"); } // printf("%d\n",flag); } return 0;}
测试数据:
2014年12程序设计竞赛A题Team
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。