C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で重みの観点から最も長いパスが最小化されるように、エッジに重みを割り当てます。


ここで1つの問題が発生します。この問題では、ツリーの1つのエッジと合計Sが与えられます。タスクは、重みの観点から最長のパスが最小化されるように、他のすべての重みに重みを割り当てることです。割り当てられた重みの合計は「S」と同じです。

アプローチは簡単です。パスに最大2つのリーフノードを含めることができるツリーのプロパティ。それは解決策を得るために使用されます。したがって、リーフノードを接続しているエッジのみに重みを割り当て、他のエッジを0に割り当てると、リーフノードに接続しているすべてのエッジが

として割り当てられます。

C ++で重みの観点から最も長いパスが最小化されるように、エッジに重みを割り当てます。

パスには最大2つのリーフノードを含めることができるため、最長のパスは次のようになります

C ++で重みの観点から最も長いパスが最小化されるように、エッジに重みを割り当てます。

#include<iostream>
#include<vector>
using namespace std;
void insertEdge(int u, int v, vector<int> adj[]) {
   adj[u].push_back(v);
   adj[v].push_back(u);
}
long double pathLength(vector<int> adj[], int sum, int n) {
   int count = 0;
   for (int i = 1; i <= n; i++) {
      if (adj[i].size() == 1)
         count++;
   }
   long double ans = 2.0 * (long double)(sum / (long double)(count));
   return ans;
}
int main() {
   int n = 6;
   vector<int> adj[n + 1];
   insertEdge(1, 2, adj);
   insertEdge(2, 3, adj);
   insertEdge(2, 4, adj);
   insertEdge(4, 5, adj);
   insertEdge(4, 6, adj);
   int sum = 1;
   cout << pathLength(adj, sum, n);
}

出力

0.5

  1. C++で2つの要素が隣接しないような循環配列の最大合計

    この問題では、循環配列cirArr[]が与えられます。私たちのタスクは、C++で2つの要素が隣接しないように循環配列の最大合計を見つけるプログラムを作成することです。 問題の説明 循環配列の場合、隣接する要素を取得できないように、配列の要素の最大合計を見つける必要があります。つまり、代替要素を取得する必要があります。 循環アレイ は、配列の最後の要素が最初の要素に接続されている特殊なタイプの配列です。 問題を理解するために例を見てみましょう 入力 cirArr[] = {4, 1, 5, 3, 2} 出力 9 説明 最大合計循環サブシーケンスは[4、5、2]です。合計=9 ソリ

  2. xとその桁の合計がC++で指定されたnと等しくなるような数xを見つけます

    ここで、1つの問題が発生します。ここで、数値nを取得する場合、x +桁の合計xが指定された数値nと同じになるように、xなどの別の値を見つける必要があります。 nの値が21であると仮定します。このプログラムは、15+桁の合計15、つまり15 + 1 + 5 =21=nとして数値x=15を返します。 この問題を解決するには、単純なアプローチに従う必要があります。 1からnまで繰り返し、各繰り返しで、数値とその桁の合計の合計が数値と同じであるかどうかを確認し、停止します。それ以外の場合は続行します。 例 #include<iostream> using namespace std; i