トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
ABC-061-B Counting Roads
■■■問題■■■
N個の都市があり、M本の道路があります。
i(1 <= i <= M) 番目の道路は、都市aiと都市bi (1 <= ai,bi <= N) を双方向に結んでいます。
同じ2つの都市を結ぶ道路は、1本とは限りません。
各都市から他の都市に向けて、何本の道路が伸びているか求めてください。
■■■入力■■■
N M
a1 b1
・
・
・
aM bM
●2 <= N,M <= 50
●1 <= ai,bi <= N
●ai != bi
●入力は全て整数である
■■■出力■■■
答えをN行に出力せよ。
i(1 <= i <= N) 行目には、都市iから他の都市に向けて、何本の道路が伸びているかを出力せよ。
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "Input1";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("4 3");
WillReturn.Add("1 2");
WillReturn.Add("2 3");
WillReturn.Add("1 4");
//2
//2
//1
//1
//●都市1からは1番目と3番目の道路が伸びています。
//●都市2からは1番目と2番目の道路が伸びています。
//●都市3からは2番目の道路が伸びています。
//●都市4からは3番目の道路が伸びています。
}
else if (InputPattern == "Input2") {
WillReturn.Add("2 5");
WillReturn.Add("1 2");
WillReturn.Add("2 1");
WillReturn.Add("1 2");
WillReturn.Add("2 1");
WillReturn.Add("1 2");
//5
//5
}
else if (InputPattern == "Input3") {
WillReturn.Add("8 8");
WillReturn.Add("1 2");
WillReturn.Add("3 4");
WillReturn.Add("1 5");
WillReturn.Add("2 8");
WillReturn.Add("3 7");
WillReturn.Add("5 2");
WillReturn.Add("4 1");
WillReturn.Add("6 8");
//3
//3
//2
//2
//2
//1
//1
//2
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] wkArr = { };
Action<string> SplitAct = pStr =>
wkArr = pStr.Split(' ').Select(X => int.Parse(X)).ToArray();
SplitAct(InputList[0]);
int N = wkArr[0];
int[] EdgeCntArr = new int[N + 1];
foreach (string EachStr in InputList.Skip(1)) {
SplitAct(EachStr);
EdgeCntArr[wkArr[0]]++;
EdgeCntArr[wkArr[1]]++;
}
for (int I = 1; I <= N; I++) {
Console.WriteLine(EdgeCntArr[I]);
}
}
}
解説
ノードからの枝の数を持つ配列を用意して、インクメントしてます。