崆若的水题之--全世界最水的邻接表二连发哈哈哈哈

有n个城市,编号为1到n,这些城市当中有m条有向边,现在Kong_Ruo在1号城市,他准备去旅游。如果Kong_Ruo能从城市1到达城市i,并能从城市i回到城市1,那么Kong_Ruo就能去城市i游览。现在请你从小到大输出所有能去游览的城市编号。

输入

第一行:两个整数n,m,分别表示城市个数与有向边个数。
后m行:每行两个整数a和b,表示a城市到b城市有一条有向边。

输出

输出所有符合要求的城市编号,每个一行,从小到大输出。

输入示例

5 4
3 1
2 3
4 3
1 2

输出示例

1
2
3

#include<iostream>
using namespace std;
const int maxn=100010;
int first[maxn],next[maxn],u[maxn],v[maxn],e;
int refirst[maxn],renext[maxn],reu[maxn],rev[maxn],ree;
int vis[maxn],revis[maxn],q[maxn],req[maxn];
void bfs(int x)
{
    int front=0,rear=0;
    vis[x]=1;
    q[rear++]=x;
    while(front<rear)
    {
        x=q[front++];
        for(int i=first[x];i;i=next[i])
        {
            if(!vis[v[i]])
            {
                vis[v[i]]=1;
                q[rear++]=v[i];
            }
        }
    }
}
void rebfs(int x)
{
    int front=0,rear=0;
    revis[x]=1;
    req[rear++]=x;
    while(front<rear)
    {
        x=req[front++];
        for(int i=refirst[x];i;i=renext[i])
        {
            if(!revis[rev[i]])
            {
                revis[rev[i]]=1;
                req[rear++]=rev[i];
            }
        }
    }
}
void AddEdge(int a,int b)
{
    u[++e]=a;
    v[e]=b;
    reu[e]=b;
    rev[e]=a;
    next[e]=first[a];
    renext[e]=refirst[b];
    first[a]=e;
    refirst[b]=e;
}
int main()
{
    int n,m,a,b,ans=0;
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
    {
        scanf("%d%d",&a,&b);
        AddEdge(a,b);
    }
    bfs(1);
    rebfs(1);
    for(int i=1;i<=n;i++)
        if(vis[i] && revis[i]) printf("%d\n",i);
    //system("pause");
}

哈哈哈哈这就是代码


试题描述

有n个城市,编号为1 ~ n,这些城市当中有一些有向边,现在Kong_Ruo从1号城市出发,请问他最多能到达多少城市呢?(一号城市也算)


输入

第一行:两个整数n,m,分别表示城市个数与有向边个数。
后m行:每行两个整数a和b,表示a城市到b城市有一条有向边。

输出

一个整数,表示Kong_Ruo最多能到达的城市数量。

输入示例

5 4
1 2
1 3
3 4
4 1

输出示例

4

其他说明

1<=n,m<=100000

#include<iostream>//邻接表
using namespace std;
const int maxn=100010;
int first[maxn],next[maxn],u[maxn],v[maxn],e;

int vis[maxn];

int q[maxn];

void bfs(int x)
{
    int front=0,rear=0;
    vis[x]=1;
    q[rear++]=x;
    while(front<rear)
    {
        x=q[front++];
        for(int i=first[x];i;i=next[i])
        {
            if(!vis[v[i]])
            {
                vis[v[i]]=1;
                q[rear++]=v[i];
            }
        }
    }
}

void AddEdge(int a,int b)
{
    u[++e]=a;  //储存有向边的信息
    v[e]=b;
    next[e]=first[a];
    first[a]=e;
}

int main()
{
    int n,m,a,b,ans=0;
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
    {
        scanf("%d%d",&a,&b);
        AddEdge(a,b);
    }
    bfs(1);
    for(int i=1;i<=n;i++) if(vis[i]) ans++;
    printf("%d",ans);
    return 0;
}

代码#2

时间: 2025-01-07 00:48:16

崆若的水题之--全世界最水的邻接表二连发哈哈哈哈的相关文章

水题纪念

在某OJ水了很多题,要是bzoj我能谁那么多就好了T_T 纪念水题100+. (这个折线图有点吓人啊,,我自己都会被吓到T_T,注册第一天我就在刷百分百水题,一下就是40+百分百水题..然后还有30+是提交以前的T_T,我好水啊.. 我就是某大神所说的:T_T 做一道难题,总比切一百道水题来的方便. 做一百道难题,总比切一道水题来的有趣. 水题纪念

ACM_输出格式(水题)

输出格式 Time Limit: 2000/1000ms (Java/Others) Problem Description: 某水比参加了XX杯,但是他太水,所以三等都木有,所以他决定出一道水题水一水. Input: 输入多组测试数据,每一组一个整数width(3-50),一个整数height(3-50),一个字符串(长度不超过width-2). Output: 对于每个测试实例,要求把字符串按要求输出(字符串处于由width为长,height为宽的矩形的中部), (...倘若不能完全对称,请

【UR #7】水题走四方

题目描述 今天是世界水日,著名的水题资源专家蝈蝈大臣发起了水题走四方活动,向全世界发放成千上万的水题. 蝈蝈大臣是家里蹲大学的教授,当然不愿意出门发水题啦!所以他委托他的助手欧姆来发. 助手欧姆最近做 UR #6 被狗狗传染了懒癌,当然不愿意出门发水题啦!所以他请来了高手 -- 地卜师. 全世界一共 n 个城市,编号分别为 1,-,n.城市之间由双向道路相连,形成了一棵树.如果这棵树以 1 为根,则除 1 以外每个结点 v 的父亲结点的编号 pv 满足 pv<v. 由于地卜师掌握了克隆的核心科技

2015南阳CCPC L - Huatuo&#39;s Medicine 水题

L - Huatuo's Medicine Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Huatuo was a famous doctor. He use identical bottles to carry the medicine. There are different types of medicine. Huatuo put medicines into the bottles and chain these b

sdut 2841 Bit Problem (水题)

题目 贴这个题是因为看题解有更简单的方法, 我做的时候是直接算的, 也很简单. 贴一下题解吧: 如果一个整数不等于 0,那么该整数的二进制表示中至少有一位是 1. 这个题结果可以直接输出 x - (x&(x-1)); 因为x-1 之后二进制下,就是最右边的1变成了0, 最右边的1的 右边所有的0变成了1, 不影响最左边. 我的代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4

sdut 2413:n a^o7 !(第三届山东省省赛原题,水题,字符串处理)

n a^o7 ! Time Limit: 1000MS Memory limit: 65536K 题目描述 All brave and intelligent fighters, next you will step into a distinctive battleground which is full of sweet and happiness. If you want to win the battle, you must do warm-up according to my inst

杭电(hdu)2053 Switch Game 水题

Switch Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13113    Accepted Submission(s): 7970 Problem Description There are many lamps in a line. All of them are off at first. A series of o

Dijkstra算法---HDU 2544 水题(模板)

/* 对于只会弗洛伊德的我,迪杰斯特拉有点不是很理解,后来发现这主要用于单源最短路,稍稍明白了点,不过还是很菜,这里只是用了邻接矩阵 套模板,对于邻接表暂时还,,,没做题,后续再更新.现将这题贴上,应该是迪杰斯特拉最水的题没有之一.纯模板 */ 题目大意: 搬东西很累,想省力,给你几个点和点之间的距离:标准题型: #include<stdio.h> #include <iostream> #include<string.h> using namespace std; #

4.7-4.9补题+水题+高维前缀和

题目链接:51nod 1718 Cos的多项式  [数学] 题解: 2cosx=2cosx 2cos2x=(2cosx)^2-2 2cos3x=(2cosx)^3-3*(2cosx) 数归证明2cos(nx)能表示成关于2cosx的多项式,设为f(n) f(1)=x,f(2)=x^2-2(其中的x就是2cosx) 假设n=1~k时均成立(k>=3) 当n=k+1时 由cos((k+1)x)=cos(kx)cos(x)-sin(kx)sin(x) cos((k-1)x)=cos(kx)cos(x)