hdu-3666(差分約束系統)
http://acm.hdu.edu.cn/showproblem.php?pid=3666
建立模型很重要哇!!
圖論的最短路,好多東西呢,得好好學學啊,spfa是個好東西。以后要多學算法多看論文了!
spfa,可以判斷負權回路哈。這個題目比較弱,4次就可以了。夜游sqrt(|v|)的,n當然是一個上界。
2010 Asia Regional Harbin
中的G題
群里推薦做做這個,看了看,不知道怎么建圖。
真s,看了log也還是沒有反應過來,
哎哎,log(ai/bj)=log(ai)-log(bj)嘛,這樣就建圖了啊!!!!!
中的G題
群里推薦做做這個,看了看,不知道怎么建圖。
真s,看了log也還是沒有反應過來,
哎哎,log(ai/bj)=log(ai)-log(bj)嘛,這樣就建圖了啊!!!!!
system of difference constraints:
WA 16次,氣人啊啊啊啊 啊,真心現在也不知道是哪里錯了:
差分約束系統,是線性規劃的一種特例。得研究研究它的對偶問題是什么,嘿嘿,好東西呀!!WA 16次,氣人啊啊啊啊 啊,真心現在也不知道是哪里錯了:
#include<stdio.h>
#include<string.h>
#include<math.h>
#define Max 0xfffffff
int N,M;
int que[1550000],into[805],vis[805];
double dis[805],map[805][805];
int spfa()
{
int head,tail,now,i;
memset(into,0,sizeof(into));
for (i=1; i<=N ; i++ )
que[i]=i,vis[i]=0,dis[i]=Max;
head=0;tail=N;que[0]=0;dis[0]=0.0;
while (head<=tail)
{
now=que[head++];
vis[now]=1;
into[now]++;
if (into[now]>4)
return 0;
for (i=1; i<=N ; i++ )
if (dis[now]+map[now][i]<dis[i])
{
dis[i]=dis[now]+map[now][i];
if (vis[i])
que[++tail]=i,vis[i]=0;
}
}
return 1;
}
int main()
{
int i,j;
double L,U,a;
while (scanf("%d%d%lf%lf",&N,&M,&L,&U)==4)
{
for (i=0; i<=N+M ; i++ )
for (j=0; j<=N+M ; j++ )
map[i][j]=Max;
for (i=0; i<=N+M ; i++ )
map[0][i]=0.0;
U=log(U);L=log(L);
for (i=1; i<=N ; i++ )
for (j=1; j<=M ; j++ )
{
scanf("%lf",&a);
map[j+N][i]=U-log(a);
map[i][j+N]=log(a)-L;
}
N=N+M;
puts(spfa()?"YES":"NO");
}
return 0;
}
#include<string.h>
#include<math.h>
#define Max 0xfffffff
int N,M;
int que[1550000],into[805],vis[805];
double dis[805],map[805][805];
int spfa()
{
int head,tail,now,i;
memset(into,0,sizeof(into));
for (i=1; i<=N ; i++ )
que[i]=i,vis[i]=0,dis[i]=Max;
head=0;tail=N;que[0]=0;dis[0]=0.0;
while (head<=tail)
{
now=que[head++];
vis[now]=1;
into[now]++;
if (into[now]>4)
return 0;
for (i=1; i<=N ; i++ )
if (dis[now]+map[now][i]<dis[i])
{
dis[i]=dis[now]+map[now][i];
if (vis[i])
que[++tail]=i,vis[i]=0;
}
}
return 1;
}
int main()
{
int i,j;
double L,U,a;
while (scanf("%d%d%lf%lf",&N,&M,&L,&U)==4)
{
for (i=0; i<=N+M ; i++ )
for (j=0; j<=N+M ; j++ )
map[i][j]=Max;
for (i=0; i<=N+M ; i++ )
map[0][i]=0.0;
U=log(U);L=log(L);
for (i=1; i<=N ; i++ )
for (j=1; j<=M ; j++ )
{
scanf("%lf",&a);
map[j+N][i]=U-log(a);
map[i][j+N]=log(a)-L;
}
N=N+M;
puts(spfa()?"YES":"NO");
}
return 0;
}
建立模型很重要哇!!
圖論的最短路,好多東西呢,得好好學學啊,spfa是個好東西。以后要多學算法多看論文了!
spfa,可以判斷負權回路哈。這個題目比較弱,4次就可以了。夜游sqrt(|v|)的,n當然是一個上界。
posted on 2012-04-05 14:42 wangs 閱讀(446) 評論(1) 編輯 收藏 引用 所屬分類: ACM-模擬