zoukankan      html  css  js  c++  java
  • UVA 10763 Foreign Exchange

    UVA_10763

    这个题目可以把交换生的u->v看做一条有向边,然后用邻接表把所有的边及其反向边存下来,并且保证邻接表中没有重复的边。这时用一个num[]数组来存储该边的数量,并且每出现一条与之相同的正向边num[]的值自加1,每出现一条与之相反的反向边,num[]的值自减1。最后统计邻接表中num的值是否全为0,如果全为0就输出YES,否则就输出NO

    另外,之所以选用邻接表,是怕题目中存在国家表示的数字很大(比如500000)的情况,后来发现最大的数字不超过1000,于是便又改用邻接矩阵存边了,这样在插入边时要比邻接表要快得多,代码复杂度也降低了很多。

    #include<stdio.h>
    #include
    <string.h>
    int G[1000][1000],n;
    int check()
    {
    int i,j;
    for(i=0;i<1000;i++)
    for(j=0;j<1000;j++)
    if(G[i][j]!=0)
    return 0;
    return 1;
    }
    int main()
    {
    int i,j,u,v;
    while(1)
    {
    scanf(
    "%d",&n);
    if(n==0)
    break;
    memset(G,
    0,sizeof(G));
    for(i=0;i<n;i++)
    {
    scanf(
    "%d%d",&u,&v);
    G[u][v]
    ++;
    G[v][u]
    --;
    }
    if(check())
    printf(
    "YES\n");
    else
    printf(
    "NO\n");
    }
    return 0;
    }


  • 相关阅读:
    正则表达式
    移动开发知识点收集
    SQL Server
    百度数据图表插件Echarts
    Xamarin
    Func与Action
    MVC Core
    利用 async & await 的异步编程
    CSS3
    [leetcode]374. Guess Number Higher or Lower
  • 原文地址:https://www.cnblogs.com/staginner/p/2182774.html
Copyright © 2011-2022 走看看