1. 程式人生 > >[BZOJ1202][HNOI2005][差分約束]狡猾的商人[水題]

[BZOJ1202][HNOI2005][差分約束]狡猾的商人[水題]

(這題 好水啊 好水啊 好水啊 好水啊!)

(話說這兩天切的題越來越水了呢!)

(貌似網上的題解都是並查集?)

使用字首和維護,有:


最簡單、基礎、沒難度的差分約束練手題。

不要隨便看程式碼,不要隨便看程式碼,不要隨便看程式碼。因為很重要說以說三遍

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <queue>
using namespace std;

const char *YES = "true";
const char *NO = "false";

//Global Variables & Definitions
#define MS(arr, x) memset(arr, x, sizeof(arr))
int w;
int n, m;
//End Global Variables & Definitions

//SPFA
#define S 105
int dis[110];
int inq[110];
int inc[110];

struct edge {
	int v, w, next;
} e[3030];
int ecnt;
int h[110];

void init_edge() {
	MS(h, ecnt = -1);
}

void adde(int u, int v, int w) {
	++ecnt;
	e[ecnt].v = v;
	e[ecnt].w = w;
	e[ecnt].next = h[u];
	h[u] = ecnt;
}

queue<int> q;
bool spfa() {
	int v;
	while(!q.empty()) q.pop();
	MS(dis, 0x80); MS(inq, 0); MS(inc, 0);
	
	dis[S] = 0; inq[S] = inc[S] = 1;
	q.push(S);
	while(!q.empty()) {
		int temp = q.front(); q.pop();
		inq[temp] = 0;
		
		for(int i = h[temp];~i;i = e[i].next) if(dis[v = e[i].v] < dis[temp] + e[i].w) {
			dis[v] = dis[temp] + e[i].w;
			
			if(!inq[v]) {
				if(inc[v] >= n) return false;
				
				++inc[v];
				inq[v] = 1;
				
				q.push(v);
			}
		}
	}
	
	return true;
}
//End SPFA

//Main Structure
const char* solve() {
	init_edge();
	scanf("%d%d", &n, &m);
	
	int s, t, v;
	for(int i = 0;i < m;++i) {
		scanf("%d%d%d", &s, &t, &v);
		
		adde(t, s - 1, -v);
		adde(s - 1, t,  v);
	}
	
	for(int i = 0;i <= n;++i) adde(S, i, 0);
	
	return spfa() ? YES : NO;
}

inline void g_ir() {
	scanf("%d", &w);
}

int main() {
	g_ir();
	
	while(w--) puts(solve());
	return 0;
}

話說現在看十年以前的省選,NOI,CTSC,IOI的題都好水啊。只有OI的知識更新換代那麼快麼?(數字三角形是IOI94我會瞎說麼)

相關推薦

[BZOJ1202][HNOI2005][約束]狡猾商人[]

(這題 好水啊 好水啊 好水啊 好水啊!) (話說這兩天切的題越來越水了呢!) (貌似網上的題解都是並查集?) 使用字首和維護,有: 最簡單、基礎、沒難度的差分約束練手題。 (不要隨便看程式碼,不要隨便看程式碼,不要隨便看程式碼。因為很重要說以說三遍) #include

bzoj1202: [HNOI2005]狡猾商人約束

urn scan space 等於 -a OS 吐槽 set blank 1202: [HNOI2005]狡猾的商人 題目:傳送門 題解:   據說是帶權並查集!蒟蒻不會啊!!!    可是聽說lxj大佬用差分約束A了,於是開始一通亂搞。    設s[i]為前i個

Bzoj1202/洛谷P2294 [HNOI2005]狡猾商人(帶權並查集/約束系統)

pen ems http type 判斷 put .com 就是 algo 題面 Bzoj 洛谷 題解 考慮帶權並查集,設\(f[i]\)表示\(i\)的父親(\(\forall f[i]<i\)),\(sum[i]\)表示\(\sum\limits_{j=fa[i]

【題解】 [HNOI2005]狡猾商人約束

AD sca main pop namespace 數組 names ace line 題面懶得復制,戳我戳我 Solution: 其實這個差分是挺顯然的,我們可以用\(s[i]\)表示從第\(1\)到\(i\)中間的收入和 重點就在式子,比如讀入\(a\),\(b\),

HNOI2005狡猾商人約束系統

turn val -- return pac const oid std ont 這個題可以用並查集做,這裏是之前一個圖論學傻了的蒟蒻的差分約束做法。。 我們考慮題面中的條件, 若s到t的為w,就相當於sum[t]-sum[s-1]=w。 那麽就是sum[t]-sum[s-

BZOJ[HNOI2005]狡猾商人約束

edge main onclick front 其中 部門 scrip 尋找 lse 1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4969 Solved: 2496[Su

BZOJ 1202 狡猾商人 約束or帶權並查集

!= pre false 其中 png 超時 差分約束 樹根 cto 題目鏈接: https://www.lydsy.com/JudgeOnline/problem.php?id=1202 題目大意: 刁姹接到一個任務,為稅務部門調查一位商人的賬本,看看賬本是不是偽造的。賬

ZOJ 2770 約束+SPFA

最大值 multiple sample mea tro output problem igp data Burn the Linked CampTime Limit: 2 Seconds Memory Limit: 65536 KB It is well know

ZOJ 2770 Burn the Linked Camp 約束 (轉)

最小 差分約束 ast divide sam ges format gen period It is well known that, in the period of The Three Empires, Liu Bei, the emperor of the Shu

HDOJ題目3440 House Man(約束

etop log help crazy code sizeof inpu field empty House Man Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/

約束系統】【最短路】【spfa】CDOJ1646 窮且益堅, 不墜青雲之誌。

put pac 時間復雜度 edge 系列 string pri class emp 求一個有n個元素的數列,滿足任意連續p個數的和不小於s, 任意連續q個數的和不大於t。 令sum[i]表示前i項的和(0<=i<=n,sum[0]=0) 那麽題目的條件可轉化為

[luoguP3275] [SCOI2011]糖果(約束

cli open inline none long cst aps ret 糖果 傳送門 差分約束裸題 但是坑! 有一個點是長為10W的鏈,需要逆序加邊才能過(真是玄學) 還有各種坑爹數據 開longlong ——代碼

51nod 1340 約束

archive typedef sign php http pre .net ++ while 思路: 帶未知量的Floyd 很強 http://yousiki.net/index.php/archives/87/ //By SiriusRen #includ

【POJ 1201】 Intervals(約束系統)

sub 代碼 idt ear ces oid std one space 【POJ 1201】 Intervals(差分約束系統) 11 1716的升級版 把原本固定的邊權改為不固定。 Intervals Time Limit: 2000MS Memor

約束系統

如果 三角形 最長 問題 [] 原理 不等式 個數 單源最短路 差分約束系統就是給出一些形如x-y<=b不等式的約束,問你是否有滿足問題的解,或者求最小,最大解。 (以下(a,b,c)表示從a向b連一條權值為c的邊 一.原理 對於圖論的最短路徑,有:d(v) <

【POJ2983】Is the Information Reliable? ——約束

存在 tail src init lose ati family fin turn 題目大意:一天南北線上有n個防禦站,給出他們之間的位置關系,問有沒有可能存在這樣一種位置布置符合所給的位置關系。關系有兩種,一種是 P A B X,表示A在B北邊X光年的位置,V A B表示

約束系統簡單介紹(入門)

難點 兩個 技術 最短 短路徑 裏的 http 最大值 image 一直不知道差分約束是什麽類型題目,最近在寫最短路問題就順帶看了下,原來就是給出一些形如x-y<=b不等式的約束,問你是否滿足有解的問題 好神奇的是這類問題竟然可以轉換成圖論裏的最短路徑問題,下面開始詳

POJ 2101 Intervals 約束

sub points struct pop lan number 其中 emp following Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27746 Accepted: 10

POJ 2983 Is the Information Reliable? 約束

memory math def alt pre cout fur 6.0 vector Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 14143 Accepted: 4439

【總結】約束模型的要點

cio 一個點 ros 最短路 所有 運行時間 16px net 不同   只是一些自己想到的東西,記下來以防忘記。   1. 求解一系列的 f[b] - f[a] <= x 不等式組時,由a向b建權值為x的邊,求最短路。有負環時無解,體現為在SPFA中一個點入隊