【1139】First Contact (30分)

简介: 【1139】First Contact (30分)【1139】First Contact (30分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<cmath>
#include<string.h>
#include<string>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
vector<int>graph[10005];  //图
bool boy[10005]; //下标为ID,元素表示该ID是否是男
int N,M,K,vstart,vend;
int main(){   
  scanf("%d%d",&N,&M);
  for(int i=0;i<M;i++){ //读取边的数据
    string a,b;
    cin>>a>>b;
    int ia=abs(stoi(a)),ib=abs(stoi(b));//将字符串化为正整数
    graph[ia].push_back(ib);//向图中加入边
    graph[ib].push_back(ia);//向图中加入边
    boy[ia]=(a[0]!='-'); //表示该人性别
    boy[ib]=(b[0]!='-');//表示该人性别
  }
  scanf("%d",&K);
  while(K--){
    scanf("%d%d",&vstart,&vend);//读取首尾结点
    vector<pair<int,int>>result;//存储符合题目要求的两个结点
    for(int i:graph[abs(vstart)])//遍历首节点的朋友
      if(i!=abs(vend)&&i!=abs(vstart)&&boy[i]==boy[abs(vstart)])
      //找到非首尾结点且与首结点性别相同的朋友作为第一个结点
        for(int j:graph[i]) //遍历第一个结点的朋友
          if(j!=abs(vend)&&j!=abs(vstart)&&boy[j]==boy[abs(vend)])
              //找到非首尾结点且与尾结点性别相同的朋友作为第二个结点
            for(int k:graph[j]) //遍历第二个结点的朋友
              if(k==abs(vend)) //尾结点是第二个结点的朋友
                  result.push_back(make_pair(i,j)); //i,j两个结点符合要求
    printf("%d\n",result.size());
    sort(result.begin(),result.end()); //排序
    for(auto&i:result) //输出
      printf("%04d %04d\n",i.first,i.second);
  }
  system("pause");
  return 0;   
}
相关文章
|
5月前
|
SQL Java 数据库连接
基于QueryWrapper的查询,查询出名字中带有o的,存款大于等于1000元的人的id、username、info、balance字段
基于QueryWrapper的查询,查询出名字中带有o的,存款大于等于1000元的人的id、username、info、balance字段
设计函数fun,其功能是:找出成绩最低的学生记录,返回
设计函数fun,其功能是:找出成绩最低的学生记录,返回
7-3 通讯录排序(20分)
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。
167 0
|
存储
【PAT甲级】1139 First Contact
【PAT甲级】1139 First Contact
79 0
打印学生选课清单 (25 分)
打印学生选课清单 (25 分)
150 0
|
存储
通讯录中每个通讯者的信息包括编号、姓名、性别、电话、E-mail地址;采用单链表结构存储
通讯录中每个通讯者的信息包括编号、姓名、性别、电话、E-mail地址;采用单链表结构存储
224 0
通讯录中每个通讯者的信息包括编号、姓名、性别、电话、E-mail地址;采用单链表结构存储
【1016】Phone Bills (25 分)
【1016】Phone Bills (25 分) 【1016】Phone Bills (25 分)
98 0
【1120】Friend Numbers (20 分)
【1120】Friend Numbers (20 分) 【1120】Friend Numbers (20 分)
97 0
【1075】PAT Judge (25 分)
【1075】PAT Judge (25 分) 【1075】PAT Judge (25 分)
112 0