最短路徑變形(最大值的最小值)

2022-09-06 22:51:20 字數 3178 閱讀 3102

題意:n個城市,m條雙向邊每條邊有個承受重量權值,問1到n最大承重量。

解法:初始化為0,選權值大的邊,更新:如果dis[j] < min(dis[pos] , ma[pos][j]) 這樣更新使得到達j的承重量盡可能的大。

//#include#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll ;

#define int ll

#define mod 100

#define gcd(m,n) __gcd(m, n)

#define rep(i , j , n) for(int i = j ; i <= n ; i++)

#define red(i , n , j) for(int i = n ; i >= j ; i--)

#define me(x , y) memset(x , y , sizeof(x))

//int lcm(int a , int b)

//ll quickpow(ll a , ll b)return ans;}

//int euler1(int x)if(x>1)ans-=ans/x;return ans;}

//const int n = 1e7+9; int vis[n],prime[n],phi[n];int euler2(int n)for(int j=1;j#define fi first

#define se second

#define lson l,mid,root<<1

#define rson mid+1,r,root<<1|1

#define pb push_back

#define mp make_pair

#define all(v) v.begin(),v.end()

#define size(v) (int)(v.size())

#define cin(x) scanf("%lld" , &x);

const int n = 1e5+9;

const int maxn = 1e3+9;

const double esp = 1e-6;

int ma[maxn][maxn] , vis[maxn] , dis[maxn];

int n , m , cnt;

void dijkstra(int u)

vis[u] = 1 ;

rep(i , 1 , n-1)

}vis[pos] = 1 ;

rep(j , 1 , n)}}

}void init()

void solve()

dijkstra(1);

cout << "scenario #" << ++cnt << ":" << endl << dis[n] << endl << endl;

}signed main()

}

題意:乙隻青蛙要跳到另乙隻青蛙的所在石頭,給出n個石頭,從1到n,使跳躍的所需最小距離範圍最小為多少?

解法:更新:如果dis[j] > max(dis[pos] , pos[j]) , 使得到達dis【j】的最長距離最小

//#include#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll ;

#define int ll

#define mod 1000000007

#define gcd(m,n) __gcd(m, n)

#define rep(i , j , n) for(int i = j ; i <= n ; i++)

#define red(i , n , j) for(int i = n ; i >= j ; i--)

#define me(x , y) memset(x , y , sizeof(x))

int lcm(int a , int b)

//ll quickpow(ll a , ll b)return ans;}

//int euler1(int x)if(x>1)ans-=ans/x;return ans;}

//const int n = 1e7+9; int vis[n],prime[n],phi[n];int euler2(int n)for(int j=1;j#define fi first

#define se second

#define lson l,mid,root<<1

#define rson mid+1,r,root<<1|1

#define pb push_back

#define mp make_pair

#define all(v) v.begin(),v.end()

#define size(v) (int)(v.size())

#define cin(x) scanf("%lld" , &x);

const int n = 1e7+9;

const int maxn = 2e2+9;

const double esp = 1e-6;

double ma[maxn][maxn];

double dis[maxn];

int vis[maxn], n , m, cnt;

pii a[maxn];

void dijia(int r)

vis[r] = 1 ;

rep(i , 1 , n-1)

}vis[pos] = 1 ;

rep(j , 1 , n)}}

}void init()

void solve()

rep(i , 1 , n)

}dijia(1);

cout << "scenario #" << ++cnt << endl;

printf("frog distance = %.3f\n\n" , dis[n]);

}signed main()

poj 3615 最短路 路徑最大值中的最小值

題意 從a點到b點的可達路徑上的最大值的最小值 解題報告 直接folyed 改變鬆弛條件,兩點的路徑最小值必然為子路徑上的最大值與其取min。define first f define second s define ll long long define mp make pair define p...

最大值 最小值

求最大最小的時候有點小技巧,就是我們兩個兩個的比較,把大個跟當前最大比較,小的跟當前最小的比較,這樣就會節約一點比較時間,有原來的2 n到3 n 2。include include 得到最大最小值 int getmaxmin int ndata,int nlen,int pnmax,int pnmi...

int float double 最大值,最小值

中沒有double的最大最小值。如果輸出的比如 100lf輸出2.23432432,沒有達到100位,則最後2後面不一定都是0。原文見view plaincopy to clipboardprint?coder acboy date 2010 3 1 include include using na...