[ccf 4] 网络延时
生活随笔
收集整理的這篇文章主要介紹了
[ccf 4] 网络延时
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網絡延時 問題描述 給定一個公司的網絡,由n臺交換機和m臺終端電腦組成,交換機與交換機、交換機與電腦之間使用網絡連接。交換機按層級設置,編號為1的交換機為根交換機,層級為 1。他的交換機都連接到一臺比自己上一層的交換機上,其層級為對應交換機的層級加1。所有的終端電腦都直接連接到交換機上。
當信息在電腦、交換機之間傳遞時,每一步只能通過自己傳遞到自己所連接的另一臺電腦或交換機。請問,電腦與電腦之間傳遞消息、或者電腦與交換機之間傳遞消息、 或者交換機與交換機之間傳遞消息最多需要多少步。 輸入格式 輸入的第一行包含兩個整數n, m,分別表示交換機的臺數和終端電腦的臺數。
第二行包含n - 1個整數,分別表示第2、3、……、n臺交換機所連接的比自己上一層的交換機的編號。第i臺交換機所連接的上一層的交換機編號一定比自己的編號小。
第三行包含m個整數,分別表示第1、2、……、m臺終端電腦所連接的交換機的編號。 輸出格式 輸出一個整數,表示消息傳遞最多需要的步數。 樣例輸入 4 2
? ? ?1 1 3
? ? ?2 1 樣例輸出 4 樣例說明 樣例的網絡連接模式如下,其中圓圈表示交換機,方框表示電腦:
其中電腦1與交換機4之間的消息傳遞花費的時間最長,為4個單位時間。 樣例輸入 4 4
? ? ?1 2 2
? ? ?3 4 4 4 樣例輸出 4 樣例說明 樣例的網絡連接模式如下:
其中電腦1與電腦4之間的消息傳遞花費的時間最長,為4個單位時間。 評測用例規模與約定 前30%的評測用例滿足:n ≤ 5, m ≤ 5。
前50%的評測用例滿足:n ≤ 20, m ≤ 20。
前70%的評測用例滿足:n ≤ 100, m ≤ 100。
所有評測用例都滿足:1 ≤ n ≤ 10000,1 ≤ m ≤ 10000 簡單題、不知道為什么考試的時候只得了80分,= = 重寫了一下 100分 #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <cmath> using namespace std; #define INF 0x3f3f3f3f #define ll long long #define N 200010 #define M 10*Nstruct Edge{int to,next; }edge[M]; int tot; int head[N];int n,m; int dp[N][2];void init() {tot=0;memset(head,-1,sizeof(head)); } void add(int u,int v) {edge[tot].to=v;edge[tot].next=head[u];head[u]=tot++; } void dfs(int u) {dp[u][0]=dp[u][1]=0;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;dfs(v);if(dp[v][0]+1>=dp[u][0]){dp[u][1]=dp[u][0];dp[u][0]=dp[v][0]+1;}else if(dp[v][0]+1>dp[u][1])dp[u][1]=dp[v][0]+1;} } int main() {while(scanf("%d%d",&n,&m)!=EOF){init();for(int i=2;i<=n;i++){int x;scanf("%d",&x);add(x,i);}for(int i=1;i<=m;i++){int x;scanf("%d",&x);add(x,i+n);}dfs(1);int ans=0;for(int i=1;i<=n+m;i++) ans=max(ans,dp[i][0]+dp[i][1]);printf("%d\n",ans);}return 0; }
當信息在電腦、交換機之間傳遞時,每一步只能通過自己傳遞到自己所連接的另一臺電腦或交換機。請問,電腦與電腦之間傳遞消息、或者電腦與交換機之間傳遞消息、 或者交換機與交換機之間傳遞消息最多需要多少步。 輸入格式 輸入的第一行包含兩個整數n, m,分別表示交換機的臺數和終端電腦的臺數。
第二行包含n - 1個整數,分別表示第2、3、……、n臺交換機所連接的比自己上一層的交換機的編號。第i臺交換機所連接的上一層的交換機編號一定比自己的編號小。
第三行包含m個整數,分別表示第1、2、……、m臺終端電腦所連接的交換機的編號。 輸出格式 輸出一個整數,表示消息傳遞最多需要的步數。 樣例輸入 4 2
? ? ?1 1 3
? ? ?2 1 樣例輸出 4 樣例說明 樣例的網絡連接模式如下,其中圓圈表示交換機,方框表示電腦:
其中電腦1與交換機4之間的消息傳遞花費的時間最長,為4個單位時間。 樣例輸入 4 4
? ? ?1 2 2
? ? ?3 4 4 4 樣例輸出 4 樣例說明 樣例的網絡連接模式如下:
其中電腦1與電腦4之間的消息傳遞花費的時間最長,為4個單位時間。 評測用例規模與約定 前30%的評測用例滿足:n ≤ 5, m ≤ 5。
前50%的評測用例滿足:n ≤ 20, m ≤ 20。
前70%的評測用例滿足:n ≤ 100, m ≤ 100。
所有評測用例都滿足:1 ≤ n ≤ 10000,1 ≤ m ≤ 10000 簡單題、不知道為什么考試的時候只得了80分,= = 重寫了一下 100分 #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <cmath> using namespace std; #define INF 0x3f3f3f3f #define ll long long #define N 200010 #define M 10*Nstruct Edge{int to,next; }edge[M]; int tot; int head[N];int n,m; int dp[N][2];void init() {tot=0;memset(head,-1,sizeof(head)); } void add(int u,int v) {edge[tot].to=v;edge[tot].next=head[u];head[u]=tot++; } void dfs(int u) {dp[u][0]=dp[u][1]=0;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;dfs(v);if(dp[v][0]+1>=dp[u][0]){dp[u][1]=dp[u][0];dp[u][0]=dp[v][0]+1;}else if(dp[v][0]+1>dp[u][1])dp[u][1]=dp[v][0]+1;} } int main() {while(scanf("%d%d",&n,&m)!=EOF){init();for(int i=2;i<=n;i++){int x;scanf("%d",&x);add(x,i);}for(int i=1;i<=m;i++){int x;scanf("%d",&x);add(x,i+n);}dfs(1);int ans=0;for(int i=1;i<=n+m;i++) ans=max(ans,dp[i][0]+dp[i][1]);printf("%d\n",ans);}return 0; }
?
轉載于:https://www.cnblogs.com/hate13/p/4643573.html
總結
以上是生活随笔為你收集整理的[ccf 4] 网络延时的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java-网络编程篇
- 下一篇: C++多线程学习