校園網路(模擬)

2021-09-07 02:35:53 字數 1480 閱讀 1711

校園網路

時間限制:

3000 ms  |  記憶體限制:65535 kb

難度:5

描述

南陽理工學院共有m個系,分別編號1~m,其中各個系之間達成有一定的協議,如果某系有新軟體可用時,該系將允許一些其它的系複製並使用該軟體。但該允許關係是單向的,即:a系允許b系使用a的軟體時,b未必一定允許a使用b的軟體。

現在,請你寫乙個程式,根據各個系之間達成的協議情況,計算出最少需要新增多少個兩系之間的這種允許關係,才能使任何乙個系有軟體使用的時候,其它所有系也都有軟體可用。 輸入

第一行輸入乙個整數t,表示測試資料的組數(t<10)

每組測試資料的第一行是乙個整數m,表示共有m個系(2<=m<=100)。

隨後的m行,每行都有一些整數,其中的第i行表示系i允許這幾個系複製並使用系i的軟體。每行結尾都是乙個0,表示本行輸入結束。如果某個系不允許其它任何系使用該系軟體,則本行只有乙個0.

輸出對於每組測試資料,輸出最少需要新增的這種允許關係的個數。

樣例輸入

1

52 4 3 0

4 5 000

1 0

樣例輸出

2

題解:剛開始想的是用map存關係,用dfs搜尋n個點內形成數的個數,用out陣列記錄當前點是否與其他節點形成關係,畫個有向樹的方法,比較麻煩;

**:

1 #include2 #include

3const

int maxn=110;4

int map[maxn][maxn],out

[maxn];

5int

vis[maxn];

6int

t,m;

7void dfs(int

x)14}15

}16intmain()29}

30for(int i=1;i<=m;i++)

33int ans=0;34

for(int i=1;i<=m;i++)

39 printf("

%d\n

",ans);40}

41return0;

42 }

然後看了別人寫的,自己想的複雜了,只需要考慮每個點是否入度和出度即可,我的想法只是把入度,以樹的形式表示出來了,也就是vis陣列;

另一種解法:

1 #include2 #include

3const

int maxn=110;4

intin[maxn],out

[maxn];

5int

main()18}

19int ans=0;20

for(int i=1;i<=m;i++)

24 printf("

%d\n

",ans);25}

26return0;

27 }

校園網路(模擬)

校園網路 時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述南陽理工學院共有m個系,分別編號1 m,其中各個系之間達成有一定的協議,如果某系有新軟體可用時,該系將允許一些其它的系複製並使用該軟體。但該允許關係是單向的,即 a系允許b系使用a的軟體時,b未必一定允許a使用b的軟體。...

NYOJ 120 校園網路

時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述 南陽理工學院共有m個系,分別編號1 m,其中各個系之間達成有一定的協議,如果某系有新軟體可用時,該系將允許一些其它的系複製並使用該軟體。但該允許關係是單向的,即 a系允許b系使用a的軟體時,b未必一定允許a使用b的軟體。現在,請...

NYOJ 120 校園網路

時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述 南陽理工學院共有m個系,分別編號1 m,其中各個系之間達成有一定的協議,如果某系有新軟體可用時,該系將允許一些其它的系複製並使用該軟體。但該允許關係是單向的,即 a系允許b系使用a的軟體時,b未必一定允許a使用b的軟體。現在,請...