旅行社的煩惱

2021-06-19 00:29:47 字數 1642 閱讀 9534

description

v11開了一家旅行社,眾所周知現在商業競爭越來越激烈,為了更好地吸引消費者的眼球,v11決定制定到一條最短的旅遊路線,路線的開始點和結束點必須是同乙個地方。你的任務就是編寫程式幫助v11尋找到這樣的路線。

現在給出旅行路線圖,圖中有n個景點編號從1到n,有m條雙向邊編號從1到m。每條邊包含三個數字a,b,c。表示這條路線連線景點a和景點b,他們之間的距離是c。為了簡化問題,我們認為:每條旅遊路線是乙個至少包含三個點的簡單迴路。每條旅遊路線的長度為它包含的所有邊的距離之和。

現在的任務是:要求你編寫程式尋找這樣的最短路,給出它的路程長度,並輸出同時存在有幾個這樣的最短路。

注意的是:

1.當兩條最短路程中所經過的景點(不考慮順序),完全相同時,才是相同的最短路程。否則,算作不同的最短路程。

2. 圖的頂點序列中,除了第乙個頂點和最後乙個頂點外,其餘頂點不重複出現的迴路叫簡單迴路。(本題中將第乙個頂點和最後乙個頂點當作同乙個景點)

3.本題中不存在自環。

input

輸入資料第一行包含乙個整數t,表示測試資料的組數。對於每組測試資料:

第一行為兩個整數n,m(1output

對於每組測試資料:如果存在這樣的最短路線,輸出它的長度和不同的最短路線的個數。如果不存在則輸出-1。兩個數字之間用空格隔開,每組測試資料一行。

sample input

1

3 31 2 1

3 1 1

3 2 1

sample output

3 1

hint

樣例一中,我們可以從景點1出發的路線:1->2->3->1;

可以從景點2出發的路線:2->3->1->2;

同樣也可以從景點3出發的路線:3->1->2->3;

我們認為這3條路線所經過的景點集合為所以他們是相同的路線。

**:

#include#include#define m 107

#define inf 0x3f3f3f

using namespace std;

int g[m][m],dis[m][m],path[m][m],pre[m];

int n,m,num,mincircle,count;

void init()

g[i][i]=dis[i][i]=0;

}}void dfs(int i,int j)

dfs(i,k);

dfs(k,j);

}void floyd()

else if(mincircle==dis[i][j]+g[i][k]+g[k][j])//記錄次數

count++;

}for(int i=1; i<=n; i++)//求最短路

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

if(dis[i][k]+dis[k][j]c)

}memset(path,0,sizeof(path));

floyd();

if(mincircle==inf)

printf("-1\n");

else

printf("%d %d\n",mincircle,count);

}return 0;

}

極地旅行社 LCT

不久之前,mirko建立了乙個旅行社,名叫 極地之夢 這家旅行社在北極附近購買了n座冰島,並且提供觀光服務。當地最受歡迎的當然是帝企鵝了,這些小傢伙經常成群結隊的遊走在各個冰島之間。mirko的旅行社遭受一次重大打擊,以至於觀光遊輪已經不划算了。旅行社將在冰島之間建造大橋,並用觀光巴士來運載遊客。m...

BZOJ2843 極地旅行社

題意 連邊,詢問權值和,單點修改權值 裸的不能再裸的lct模板題。話說我就貼了個剛寫完的板,改了下輸入,輸出,資料範圍都沒看,居然就a了。一點坑點都沒有,要不要這樣啊。include include include define n 200005 using namespace std int n,...

bzoj2843 極地旅行社

description 不久之前,mirko建立了乙個旅行社,名叫 極地之夢 這家旅行社在北極附近購買了n座冰島,並且提供觀光服務。當地最受歡迎的當然是帝企鵝了,這些小傢伙經常成群結隊的遊走在各個冰島之間。mirko的旅行社遭受一次重大打擊,以至於觀光遊輪已經不划算了。旅行社將在冰島之間建造大橋,並...