一看n的範圍果斷放棄樸素的列舉每一對點求最短路的想法。
其實看到題目二進位制,演算法一般都和二進位制沾邊的。
可以把二進位制的每個結點作為特別的中轉站,所有結點連邊可能的情況<=它二進位制的位數,所以可以將後者作為連邊的條件然後在取最短路的時候判斷是不是有效的邊就可以了,但是,本來是想在求最短路的時候加個判斷來只有lowbit等於當前權值時進行放縮,後來想想沒必要,因為兩個結點有多個中轉站可以走最短的那個肯定是lowbit那乙個,所以直接最短路即可。
#include#include#include#include#include#include#include#include/*#include*/
//#pragma gcc optimize(2)
using namespace std;
typedef long long ll;
inline ll read()
while(cc>='0'&&cc<='9')
return kk*f;
}void outll(ll x)
if(x>9)outll(x/10);
putchar(char(x%10+'0'));
}const int maxn=100222;
const ll inf=1e18+7;
const ll mod=1000000007;
const double pi=acos(-1);
#define pii pair#define mp(x,y) make_pair(x,y)
vectoredge[maxn];
ll n;
void add(ll a,ll b,ll w)
ll dis[maxn];
bool vis[maxn];
void diji()
} }}int main()
}} diji();
inf==dis[n]?printf("impossible\n"):printf("%lld\n",dis[n]/2ll);
}}
牛妹的遊戲
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld upd 資料保證不會有兩條控制鏈控制的據點完全相同,也保證不會有某條控制鏈兩端控制的據點相同。牛妹最近沉迷於乙個名為 ingress 的遊戲中 遊戲中,藍綠營兩個對...
牛客 牛妹愛數列 K K K
思路 剛開始考慮的是貪心,讓sum 0 遇到1就 0則 找到sum最大的時候,在這個時候反轉一次,這樣是會漏情況的 如 0 0 0 0 0 1 1 1 可以把0變為1 再全部變為0 那麼只能考慮dp了 首先要確定dp的意義,根據要求的 肯定是要dp n 為前n為都為0的 那麼考慮把dp i 定為 前...
問題 A 牛妹的蛋糕
題目描述 眾所周知,牛妹非常喜歡吃蛋糕。第一天牛妹吃掉蛋糕總數三分之一多乙個,第二天又將剩下的蛋糕吃掉三分之一多乙個,以後每天吃掉前一天剩下的三分之一多乙個,到第n天準備吃的時候只剩下乙個蛋糕。牛妹想知道第一天開始吃的時候蛋糕一共有多少呢?輸入輸入n,0 通過可以設立方程,設原先有x個,第二天為x ...