ZOJ1455差分約束

2021-06-23 08:59:33 字數 1828 閱讀 5688

這題做了之後發現自己對差分約束好像終於懂了一點,開始看了roll神的做最長路才a掉

後來自己想了老半天想出來了最短路怎麼寫

最長路版:

#include #include #include #include #include #include #include #include #include #include #include #include #include#includeusing namespace std;

#define inf 0xfffffff

#define maxn 10000

int n;

struct bian

edge[maxn*10];

int head[maxn],dist[maxn],cnt[maxn],tot;

bool vis[maxn];

void add(int u,int v,int w)

bool spfa(int s)

dist[s]=0;

queueq;

q.push(s);

vis[s]=true;

cnt[s]++;

while(!q.empty())}}

}return true;

}int main()

else if(strcmp(str,"faf")==0)

else if(strcmp(str,"saf")==0)

else

}for(int i=1;i<=n;i++)

add(0,i,0);

printf("case %d:\n",kase++);

if(!spfa(0)) printf("impossible\n");

else

}printf("\n");

}return 0;

}

最短路版:

#include #include #include #include #include #include #include #include #include #include #include #include #include#includeusing namespace std;

#define inf 0xfffffff

#define maxn 10000

int n;

struct bian

edge[maxn*10];

int head[maxn],dist[maxn],cnt[maxn],tot;

bool vis[maxn];

void add(int u,int v,int w)

bool spfa(int s)

dist[s]=0;

queueq;

q.push(s);

vis[s]=true;

cnt[s]++;

while(!q.empty())}}

}return true;

}int main()

else if(strcmp(str,"faf")==0)

else if(strcmp(str,"saf")==0)

else

}for(int i=1;i<=n;i++)

add(0,i,-t[i]);

printf("case %d:\n",kase++);

if(!spfa(0)) printf("impossible\n");

else

for(int i=1;i<=n;i++)

}printf("\n");

}return 0;

}

zoj 3668 差分約束

題意 給定l,r a,b 表示序列從l到r的和 a b。並輸出序列最大的取值,誤解輸出 the spacecraft is broken 查分約束 u v 建條邊 則有dis v dis u w u,v 即dis v dis u w u,v sum r 表示0到r的和。則sum r sum l 1 ...

zoj4028(差分約束)

題意 給你以i為結尾的最長上公升子串行的值,和每個值的區間範圍求可行的a i 題解 差分約束,首先滿足l i a i r i 可以建乙個虛擬節點n 1,那麼有a n 1 a i l i a i a n 1 r i 同時當 f i f j i include include include inclu...

zoj 3668 差分約束

約束條件 f i 表示前i塊石頭的能量總和。f r f l 1 a f r f l 1 b f i f i 1 10000 f i f i 1 10000 關於為什麼是字典序。在網上看到如下 總結了一下,差分約束系統有兩個解決方案 1,最短路模型。所有的約束條件都是形如f x f y b,b正負不分...