bzoj 3931:[CQOI 2015]ネットワークスループット
タイトルの説明
ルーティングとは、コンピュータネットワークを介してソースアドレスから目的アドレスに情報を転送する活動であり、コンピュータネットワーク設計における重点と難点でもある.ネットワークでの実装
ルーティング転送されるハードウェアデバイスをルータと呼ぶ.パケットが最も速く目的地に到達するために、ルータは、パケットを転送するために最適なパスを選択する必要がある.たとえば、
一般的なルーティングアルゴリズムOSPF(オープン最短パス優先)では、ルータは古典的なDijkstraアルゴリズムを使用して最短パスを計算し、できるだけ最短パスに沿って計算します.
パス転送パケット.
現在、1つのコンピュータネットワークにおける各ルータ間の接続状況と、各ルータの最大スループット(すなわち、毎秒転送可能なパケット数)が既知である
量)は,すべてのパケットが必ず最短経路で転送されると仮定し,ルータ1からルータnへのネットワークの最大スループットを計算してみる.計算中に転送および転送を無視
送信される時間オーバーヘッドは、リンクの帯域幅制限を考慮せず、すなわち、パケットが瞬時にネットワークを通過できると考えられる.ルータ1からルータnまでを起点と終点とし、自身
のスループットは考慮されず,ネットワーク上にも1とnを直接接続するリンクは存在しない.
入力フォーマット
入力ファイルの最初の行には、ルータの数とリンクの数を表す2つのスペースで区切られた正の整数nとmが含まれます.ネットワーク内のルータは1からnを使用する
番号.
次に、m行は、各行に3つのスペースで区切られた正の整数a、b、dを含み、ルータaからルータbまでの距離dの双方向リンクがあることを示す.
次にn行、各行は正の整数cを含み、各ルータのスループットをそれぞれ与える.
出力フォーマット
整数を出力し、問題のスループットを求めます.
入力サンプル
7 10
1 2 2
1 5 2
2 4 1
2 3 3
3 7 1
4 5 4
4 3 1
4 6 1
5 6 2
6 7 1
11
00
20
50
20
60
1
出力サンプル
70
データ範囲
30%のデータに対してn≦100,m≦1000
100%のデータに対してn≦500,m≦100000,d,c≦10^9
タイトルフォーマットはこうしましょう....
裸の最大流.まず最短図を飛び出します.次に、制限流量を分解して最大流を走ればいいです.
longlongを運転してください.最初はわけがわからなくてT
ルーティングとは、コンピュータネットワークを介してソースアドレスから目的アドレスに情報を転送する活動であり、コンピュータネットワーク設計における重点と難点でもある.ネットワークでの実装
ルーティング転送されるハードウェアデバイスをルータと呼ぶ.パケットが最も速く目的地に到達するために、ルータは、パケットを転送するために最適なパスを選択する必要がある.たとえば、
一般的なルーティングアルゴリズムOSPF(オープン最短パス優先)では、ルータは古典的なDijkstraアルゴリズムを使用して最短パスを計算し、できるだけ最短パスに沿って計算します.
パス転送パケット.
現在、1つのコンピュータネットワークにおける各ルータ間の接続状況と、各ルータの最大スループット(すなわち、毎秒転送可能なパケット数)が既知である
量)は,すべてのパケットが必ず最短経路で転送されると仮定し,ルータ1からルータnへのネットワークの最大スループットを計算してみる.計算中に転送および転送を無視
送信される時間オーバーヘッドは、リンクの帯域幅制限を考慮せず、すなわち、パケットが瞬時にネットワークを通過できると考えられる.ルータ1からルータnまでを起点と終点とし、自身
のスループットは考慮されず,ネットワーク上にも1とnを直接接続するリンクは存在しない.
入力フォーマット
入力ファイルの最初の行には、ルータの数とリンクの数を表す2つのスペースで区切られた正の整数nとmが含まれます.ネットワーク内のルータは1からnを使用する
番号.
次に、m行は、各行に3つのスペースで区切られた正の整数a、b、dを含み、ルータaからルータbまでの距離dの双方向リンクがあることを示す.
次にn行、各行は正の整数cを含み、各ルータのスループットをそれぞれ与える.
出力フォーマット
整数を出力し、問題のスループットを求めます.
入力サンプル
7 10
1 2 2
1 5 2
2 4 1
2 3 3
3 7 1
4 5 4
4 3 1
4 6 1
5 6 2
6 7 1
11
00
20
50
20
60
1
出力サンプル
70
データ範囲
30%のデータに対してn≦100,m≦1000
100%のデータに対してn≦500,m≦100000,d,c≦10^9
タイトルフォーマットはこうしましょう....
裸の最大流.まず最短図を飛び出します.次に、制限流量を分解して最大流を走ればいいです.
longlongを運転してください.最初はわけがわからなくてT
#include
#include
#include
#include
using namespace std;
inline int min(int x,int y)
{
if(x0&&d[a[i].t]==-1)
{
d[a[i].t]=d[k]+1;
r++;
q[r]=a[i].t;
}
}
}
if(d[p]>=0)
return true;
return false;
}
inline long long dfs(int k,long long s)
{
if(k==p)
return s;
long long t=s;
int i;
for(i=head[k];i!=0;i=a[i].next)
{
if(d[a[i].t]==d[k]+1&&a[i].f>0)
{
long long xx=dfs(a[i].t,min(s,a[i].f));
a[i].f-=xx;
if(i%2==0)
a[i-1].f+=xx;
else
a[i+1].f+=xx;
s-=xx;
}
}
return t-s;
}
inline long long maxflow()
{
long long s=0;
while(bfs())
s+=dfs(1,(long long)1000000000*(long long)5000);
return s;
}
long long dis[501];
bool v[501];
inline void spfa()
{
int i;
for(i=1;i<=500;i++)
dis[i]=(long long)1000000000*(long long)5000;
memset(v,false,sizeof(v));
queue Q;
while(!Q.empty())
Q.pop();
Q.push(1);
dis[1]=0;
v[1]=true;
while(!Q.empty())
{
int d=Q.front();
v[d]=false;
Q.pop();
int i;
for(i=exhead[d];i!=0;i=exa[i].next)
{
int t=exa[i].t;
if(dis[d]+exa[i].f