題目鏈結
題意:n種貨幣,m種交換、s、v 。邊:u、v、r1、c1、r2、c2表示u貨幣換成v貨幣需要c1手續費和交換率r1,v換u為c2,r2.(轉換公式:val[v] = (val[u]-c1)r1)
初始有s貨幣v枚。問能否通過一系列的交換,可以獲得比初始更多的錢?
解法:
//#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 = 1e4+9;
const int maxn = 1e3+9;
const double esp = 1e-6;
int head[maxn] , tol ;
int n , m , s ;
double v;
int vis[maxn] , ans[maxn];
double dis[maxn];
struct nodeg[maxn<<1];
void add(int u , int v , double w , double p);
head[u] = tol;
}bool spfa(int u)}}
}}
return true;
}void init()
void solve()
if(spfa(s))else
}signed main()
模板 Spfa判負環
給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。請你判斷圖中是否存在負權迴路。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸出格式 如果圖中存在負權迴路,則輸出 yes 否則輸出 no 資料範圍 1 n 20...
TT 的美夢(SPFA判負環)
這一晚,tt 做了個美夢!在夢中,tt 的願望成真了,他成為了喵星的統領!喵星上有 n 個商業城市,編號 1 n,其中 1 號城市是 tt 所在的城市,即首都。喵星上共有 m 條有向道路供商業城市相互往來。但是隨著喵星商業的日漸繁榮,有些道路變得非常擁擠。正在 tt 為之苦惱之時,他的魔法小貓咪提出...
spfa演算法及判負環詳解
spfa shortest path faster algorithm 是一種單源最短路徑的演算法,基於bellman ford演算法上由佇列優化實現。也就是說,bellman ford是一種無腦,瘋狂鬆弛的演算法。其複雜度為o nm 可想而知,對於上萬的資料會炸的一塌糊塗。相對而言,spfa顯得就...