話說寧波市的中小學生在鎮海中學參加計算機程式設計比賽,比賽之餘,他們在鎮海中學的各個景點參觀。鎮海中學共有n個景點,每個景點均有若干學生正在參觀。這n個景點以自然數1至n編號,每兩個景點的編號均不同。每兩個景點之間有且只有一條路徑。選擇哪個景點集中的學生,才能使所有學生走過的路徑之和最小呢?
如果存在多個解,則輸出距離1最近的那個點,可以證明答案唯一
輸入檔案center.in中有若干行:
第一行只有乙個正整數n,表示景點數。
第二行有n個1至1000間的整數,這n個整數間互相以乙個空格分隔。其中第i個整數表示第i個景點處的學生數。
第三行至第n+1行,每行有三個整數i,j,k,表示景點i和景點j之間有一條長尾k的路徑直接連線。其中i<>j,1≤i≤n,1≤j≤n;1≤k≤1000。
輸出檔案center.out中有二行;
第一行只有乙個整數i,表示在第i個景點處集中時,所有學生走過的路徑之和最短。
第二行也只有乙個整數,表示所有學生走過的路徑之和的最小值。
43 2 4 1
1 2 5
3 1 6
2 4 4143
所有的資料均隨機生成,且滿足:
30%的資料,1≤n≤200。
60%的資料,1≤n≤3000。
100%的資料,1≤n≤100000。
給出一棵樹,每個點有一定的人,每條邊有邊權
問乙個最優點使得人走過的總路徑最短和最短路徑
換根\(dp\)模板題
先弄出1號點的路徑
然後換根\(dp\)
方程:\(f[x]=f[now]+val[i]*(size[1]-2*size[now])\)
#include#define inf 99999999999999
using namespace std;
struct node
a[200005];
long long n,i,x,y,z,ans,ansid,s,tot,p[100005],f[100005];
void add(long long x,long long y,long long z)
void dfs(long long now,long long fa,long long dis)
}void dp(long long now,long long fa)
dp(x,now);
}}int main()
ans=inf;
dfs(1,0,0);
dp(1,0);
if (f[1]<=ans)
printf("%lld\n",ansid);
printf("%lld\n",ans);
return 0;
}
JZOJ2023年8月11日提高組T2 寶石
見上帝動了惻隱之心,天後也想顯示一下慈悲之懷,隨即從口袋中取出一塊魔術方巾,讓身邊的美神維納斯拿到後堂的屏風上去試試,屏風是正方形的,高和寬方向上各劃有m條魚屏風的邊平行的直線,平行直線間的距離為1厘公尺。這2m條直線共有m m個交點,在某些交點上鑲嵌著寶石。如果魔術方巾的邊與屏風的邊平行且魔術方巾...
2023年11月30日leetcode每日一題
leetcode刷題記錄 767.重構字串 思路 分為兩大部分,第一部分判斷字串是否可以重構,第二部分判斷重構字串 第一部分 找出最大出現次數字母的次數,判斷是否超過 n 1 2,若超過則返回空字串,若不超過則可以進行重組織 第二部分 先對出現次數小於等於n 2的字母在奇數下標上進行排序,奇數下標滿...
2023年2月8日 OJ習題
這類題的常規思路是結構體排序,但是本題由於並沒有多種元素,因此用不著結構體,僅僅是陣列排序就可以 include using namespace std int n,m,o int f 110 bool cmp int a,int b intmain return0 先打表,然後直接些就好了 inc...