P3623 [APIO2008]免費道路 WQS二分
題意:
分析:
手動給邊權賦值,轉化成 PP2619 [國家集訓隊2]Tree I
程式碼:
#include<bits/stdc++.h>
using namespace std;
namespace zzc
{
const int maxn = 2e4+5;
const int maxm = 100005;
const double eps = 1e-5;
int fa[maxn];
int n,m,need,tot,cnt;
bool vis[maxm];
struct edge
{
int frm,to,nxt,flag;
double val;
}e[maxm];
bool cmp(edge a,edge b)
{
if(a.val==b.val) return a.flag<b.flag;
return a.val<b.val;
}
int find(int u)
{
return fa[u]==u?u:fa[u]=find(fa[u]);
}
void init()
{
scanf("%d%d%d",&n,&m,&need);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&e[i].frm ,&e[i].to,&e[i].flag);
e[i].val=rand()%m;
}
}
void kruskal()
{
sort(e+1,e+m+1,cmp);
for(int i=1;cnt!=n-1;i++)
{
int fx=find(e[i].frm),fy=find(e[i].to);
if(fx!=fy)
{
vis[i]=true;
cnt++;
fa[fx]=fy;
if(e[i].flag==0) tot++;
}
}
}
void solve()
{
double l=-2e5+5,r=2e5+5;
while(r-l>=eps)
{
double mid=(l+r)/2.0;
for(int i=1;i<=m;i++)
{
if(!e[i].flag) e[i].val+=mid;
vis[i]=false;
}
for(int i=1;i<=n+1; i++) fa[i]=i;
cnt=0,tot=0;
kruskal();
if(tot>=need) l=mid+1;
else r=mid-1;
if(tot==need)
{
for(int i=1;i<=m;i++) if(vis[i]) printf("%d %d %d\n",e[i].frm,e[i].to,e[i].flag);
return ;
}
for(int i=1; i<=m; i++) if(e[i].flag==0)e[i].val-=mid;
}
printf("no solution\n");
}
void work()
{
srand(time(0));
init();
solve();
}
}
int main()
{
zzc::work();
return 0;
}
相關文章
- wqs二分(帶權二分)
- [dp 小計] wqs 二分
- DP最佳化——wqs二分
- wqs二分學習筆記筆記
- WQS 二分 & 凸最佳化dp
- 企業免費建站-免費響應式網站-免費釋出資訊網站
- “免費”ERP真不免費
- “免費”ERP真不免費!
- 免費的FTP工具,免費的FTP工具下載!FTP
- 資料免費
- 開源=免費?
- 可免費使用的免費API分享API
- 網路流&費用流&二分圖
- 免費https證書HTTP
- SSL 免費證書
- 阿里免費素材庫阿里
- 免費的桌布APIAPI
- 免費 ssl 證書
- 什麼是免費SSL證書?免費SSL證書能用嗎?
- 免費領!500份大廠P7面試題免費送!!面試題
- 免費gm許可權手遊 永久免費gm手遊平臺
- nb!免費api大全分享API
- 免費api介面大全分享API
- SAP SD免費訂單
- 免費餡餅 題解
- linux clamav 免費查毒工具Linux
- ZoteroGPT免費使用GPT教程GPT
- Google 免費 AI課程GoAI
- 免費雲伺服器伺服器
- 個人OJ免費搭建
- 高仿包代理免費
- 免費資源網站網站
- 使用python免費傳送簡訊,想發多少就發多少,全部免費Python
- 哪個免費OA系統好?免費OA選型注意點有哪些?
- 免費ftp站點,使用三款ftp工具連線免費ftp站點FTP
- 各類免費API介面推薦,再也不怕找不到免費API了API
- 安裝免費IDC免費財務VPS管理系統Hyper-V被控
- AI繪畫軟體免費嗎?有哪些免費的ai作畫平臺!AI