解題報告:
用時:1h30min,1tle
這題首先要明白,到終點至少要經過一條n的出邊,所以如果可行,一定是將某一條出邊走很多次,然後再到達終點,即 \(2*w+j==t\),所以只要 \(j=t\mod2*w\) 存在即可,所以我們列舉每一條出邊,然後跑spfa ,看 \(f[n][j]\) 是否存在即可,我們定義 \(f[i][j]\) 表示到達了\(i\)這個點 走過的距離\(s \mod2*w\)為\(j\)的最小時間,因為要保證到達n後時間\(\leq t\),所以我們要使得\(f[n][j]\)盡量小,做spfa即可
#include #include #include #include #include #include #define rg register
#define il inline
#define iter iterator
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long ll;
const int n=55,m=1000005;
int q[m][2],mod=m,n,m,head[n],to[n<<1],dis[n<<1],nxt[n<<1],num=0,mo;
ll tt,f[n][20005];bool vis[n][20005];
void link(int x,int y,int z)
void spfa()
for(int i=head[n];i;i=nxt[i])
} puts("impossible");
}int main()
51nod1326 遙遠的旅途
給你乙個n個點m條邊的無向圖,每條邊有正整數的邊權,問是否存在一條0到n 1的長度為t的路徑 點和邊可以重複 n,m 50 邊權不超過10000 t 1018 資料組數不超過3 這道題有點考思維啊!考慮這樣的一條路徑。如果不是簡單路徑,它可能會包括若干個環。如果我確定了乙個必須走的環,假設它的長度為...
51nod1326 遙遠的旅途
一張有n個點,m條變的無向圖,每條邊有邊權。在0時刻有乙個人在點1,每一次他走過一條邊,消耗的時間為這條邊的邊權,而不能停留在原地。現在他想知道是否存在一種方案使得他在t時刻剛好到達點n。多組資料,case 3,2 n 50,1 m 50,1 t 10 18 上上週做gdoi組時worldwide ...
51 Nod 1326 遙遠的旅途
例如樣例中小鹿的行程可以是0 1 2 0 2.這題長得很像乙個完全揹包,但是是在乙個圖上面的。因為一條邊很可能會重複走,那麼連向n的邊肯定有一條至少走一次,所以與n相連的邊的重複可能性最大。其他有重複也沒有關係,下面會講 我們考慮在走到n之後,然後在與n連線的一條邊上不斷地折返,最後時間到達t。那麼...