Codeforces beta round #95 (Div. 2) (point double Unicom)

Source: Internet
Author: User
D. subwaytime limit per test

2 seconds

Memory limit per test

256 megabytes

Input

Standard Input

Output

Standard output

A subway scheme, classic for all berland cities is represented by a setNStations connectedNPassages,
Each of which connects exactly two stations and does not pass through any others. besides, in the classic scheme one can get from any station to any other one along the passages. the passages can be used to move in both directions ctions. between each pair of stations
There is no more than one passage.

Berland mathematicians have recently proved a theorem that states that any classic scheme has a Ringroad. there can be only one Ringroad. in other words, in any classic scheme one can find the only scheme consisting of stations (where any two neighbouring ones
Are linked by a passage) and this cycle doesn't contain any station more than once.

This operation tion had a powerful social impact as now the stations cocould be compared according to their distance from the Ringroad. for example, a citizen cocould say "I live in three passages from the Ringroad" and another one cocould reply "You loser, I live in
One passage from the Ringroad ". The Internet soon got filled with applications that promised to count the distance from the station to the Ringroad (send a text message to a short number ...).

The berland government decided to put an end to these disturbances and start to control the situation. you are requested to write a program that can determine the remoteness from the Ringroad for each station by the city subway scheme.

<P = ""> <p = "">

Input

<P = "">

The first line contains an integerN(3 cores ≤ CoresNLimit ≤ limit 3000 ),NIs
The number of stations (and trains at the same time) in the subway scheme. ThenNLines contain descriptions of the trains, one per line. Each line contains
A pair of IntegersXI, Bytes,YI(1 digit ≤ DigitXI, Bytes,YILimit ≤ limitN)
And represents the presence of a passage from StationXITo StationYI.
The stations are numbered from 1NIn an arbitrary order. It is guaranteed thatXI  =YIAnd
That no pair of stations contain more than one passage. The passages can be used to travel both ways. it is guaranteed that the given description represents a classic subway scheme.

<P = ""> <p = "">

Output

<P = "">

PrintNNumbers. Separate the numbers by spaces,I-Th
One shoshould be equal to the distance ofI-Th station from the Ringroad. For the Ringroad stations print number 0.

<P = ""> <p = "">

Sample test (s)

<P = ""> <p = "">

Input
41 34 34 21 2
Output
0 0 0 0 
Input
61 23 46 42 31 33 5
Output
0 0 0 1 1 2 

#include<iostream>using namespace std;#define MAXN 10000#define INF 999999struct Edge { int v, next; };Edge edge[MAXN];int dfn[MAXN], low[MAXN];int stk[MAXN], top, id;int head[MAXN], E;int dis[MAXN], block[MAXN];void add_edge ( int u, int v ){    E++;    edge[E].v = v;    edge[E].next = head[u];    head[u] = E;}void Tarjan ( int u, int father ){    stk[++top] = u;    dfn[u] = low[u] = ++id;    for ( int i = head[u]; i != -1; i = edge[i].next )    {        if ( edge[i].v == father ) continue;        if ( dfn[edge[i].v] == 0 )        {            Tarjan ( edge[i].v, u );            low[u] = min ( low[u], low[edge[i].v] );            if ( low[edge[i].v] > dfn[u] )                top--;            else if ( low[edge[i].v] == dfn[u] )            {                int t, cnt = 0;                do                {                    t = stk[top--];                    block[++cnt] = t;                } while ( t != u );            }        }        else            low[u] = min ( low[u], dfn[edge[i].v] );    }}void BFS (){    int que[MAXN];    bool vis[MAXN] = { 0 };    int front = 0, rear = 0;    que[rear++] = block[1];    vis[block[1]] = true;    while ( front < rear )    {        int u = que[front++];        for ( int i = head[u]; i != -1; i = edge[i].next )        {            if ( ! vis[edge[i].v] )            {                if ( dis[edge[i].v] == INF )                    dis[edge[i].v] = dis[u] + 1;                que[rear++] = edge[i].v;                vis[edge[i].v] = true;            }        }    }}int main(){    int n, u, v;    cin >> n;    for ( int i = 0; i < n * 2 + 1; i++ )    {        head[i] = block[i] = -1;        dfn[i] = low[i] = 0;        dis[i] = INF;        E = top = id = 0;    }    for ( int i = 1; i <= n; i++ )    {        cin >> u >> v;        add_edge ( u, v );        add_edge ( v, u );    }    Tarjan ( 1, 0 );    for ( int i = 1; i <= n; i++ )        dis[block[i]] = 0;    BFS();    for ( int i = 1; i < n; i++ )        cout << dis[i] << ' ';    cout << dis[n] << endl;    return 0;}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.