Problem Description


Mr. Panda lives in Pandaland. There are many cities in Pandaland. Each city can be treated as a point on a 2D plane. Different cities are located in different locations.

There are also M bidirectional roads connecting those cities. There is no intersection between two distinct roads except their endpoints. Besides, each road has a cost w.

One day, Mr. Panda wants to find a simple cycle with minmal cost in the Pandaland. To clarify, a simple cycle is a path which starts and ends on the same city and visits each road at most once.

The cost of a cycle is the sum of the costs of all the roads it contains.

Input


The first line of the input gives the number of test cases, T. T test cases follow.

Each test case begins with an integer M.

Following M lines discribes roads in Pandaland.

Each line has 5 integers x1,y1,x2,y2, w, representing there is a road with cost w connecting the cities on (x1,y1) and (x2,y2).

Output


For each test case, output one line containing Case #x: y, where x is the test case number (starting from 1) and y is the cost Mr. Panda wants to know.

If there is no cycles in the map, y is 0.

limits

∙1≤T≤50.

∙1≤m≤4000.

∙−10000≤xi,yi≤10000.

∙1≤w≤105.

Sample Input

2
5
0 0 0 1 2
0 0 1 0 2
0 1 1 1 2
1 0 1 1 2
1 0 0 1 5
9
1 1 3 1 1
1 1 1 3 2
3 1 3 3 2
1 3 3 3 1
1 1 2 2 2
2 2 3 3 3
3 1 2 2 1
2 2 1 3 2
4 1 5 1 4

Sample Output

Case #1: 8
Case #2: 4

Source


2016 CCPC-Final

题解


题意:给出一个无向图,问其中的最小简单环(经过每条边仅一次),若找不到环,输出0。

枚举每一条边,删除它,再求这两点之间的最短路即可。

当然,直接这么做,时间\(O(m(n+m)logn)\),因此需要剪枝:

若当前最小环值为ans,那么在最短路过程中,当前最小边的长度大于ans,直接退出即可。

参考代码

#include <map>
#include <queue>
#include <cmath>
#include <cstdio>
#include <complex>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define ll long long
#define inf 5000000000LL
#define PI acos(-1)
#define REP(i,x,n) for(int i=x;i<=n;i++)
#define DEP(i,n,x) for(int i=n;i>=x;i--)
#define mem(a,x) memset(a,x,sizeof(a))
using namespace std;
ll read(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void Out(ll a){
if(a<0) putchar('-'),a=-a;
if(a>=10) Out(a/10);
putchar(a%10+'0');
}
const int N=80005;
map<int,map<int,int> >pos,vis;
int sz;
int find(int x,int y){
if(!pos[x][y]) pos[x][y]=++sz;
return pos[x][y];
};
struct node{
int to,nxt;
ll cost;
node(){}
node(int s1,int s2,ll s3){
to=s1;nxt=s2;cost=s3;
}
bool operator < (const node &an) const{
return cost>an.cost;
}
}Path[N];
int head[N],e;
void Addedge(int u,int v,int w){
Path[++e]=node(v,head[u],(ll)w);
head[u]=e;
}
void Init(){
sz=0;e=0;
mem(head,0);
pos.clear();
vis.clear();
}
ll dis[N],ans;
bool book[N];
ll Dijkstra(int s,int t,ll w){
priority_queue<node>que;
REP(i,0,sz) dis[i]=inf;
mem(book,false);
dis[s]=0;
que.push(node(s,-1,0));
int u,v;
struct node cur;
while(!que.empty()){
cur=que.top();
que.pop();u=cur.to;
if(cur.cost>=w) break;;
if(book[u]) continue;
book[u]=true;
for(int i=head[u];i;i=Path[i].nxt){
v=Path[i].to;
if(dis[v]>dis[u]+Path[i].cost){
dis[v]=dis[u]+Path[i].cost;
que.push(node(v,-1,dis[v]));
}
}
}
return dis[t];
}
int main(){
int T=read();
REP(i,1,T){
Init();
int m=read();
int u,v,w,x1,y1,x2,y2;
REP(i,1,m){
x1=read();y1=read();
x2=read();y2=read();
w=read();
u=find(x1,y1);v=find(x2,y2);
Addedge(u,v,w);
Addedge(v,u,w);
}
ans=inf;ll tmp;
REP(i,1,sz){
for(int k=head[i];k;k=Path[k].nxt){
u=i;v=Path[k].to;
if(vis[u][v]||vis[v][u]) continue;
vis[u][v]=vis[v][u]=1;
tmp=Path[k].cost;
Path[k].cost=inf;
ans=min(ans,Dijkstra(u,v,ans-tmp)+tmp);
Path[k].cost=tmp;
}
}
printf("Case #%d: %lld\n",i,ans==inf?0:ans);
}
return 0;
}

最新文章

  1. 快递Api接口 &amp; 微信公众号开发流程
  2. MongoDB(五)mongo语法和mysql语法对比学习
  3. datable-默认参数列表
  4. JavaScript的Date对象
  5. node生成自定义命令(yargs/commander)
  6. 详解javascript中的call, apply
  7. libvirtVirsh
  8. 【转】关于ios10中ATS的问题
  9. 手机自动化测试:Appium源码分析之跟踪代码分析六
  10. 微服务架构 - SpringCloud整合分布式服务跟踪zipkin
  11. 一个关于kindle固件修改的问题
  12. 移动端轮播图vue-awesome-swiper
  13. SQL SERVER数据库删除LOG文件和清空日志的方案
  14. leetcode146
  15. linux Mate Lxde 消耗资源对比
  16. Android-Kotlin-印章类
  17. cocos2d-x学习记录5——CCTransition场景过渡
  18. 06 爬虫框架:scrapy
  19. Error! Failed to install react, react-dom, next, try again.
  20. 20172324《Java程序设计》第二周学习总结

热门文章

  1. 暴力 Codeforces Round #305 (Div. 2) B. Mike and Fun
  2. 141 Linked List Cycle 环形链表
  3. js数据类型之判断
  4. vscode中将本地数据push至git repository
  5. ES6学习笔记(4)----正则的扩展
  6. elf 文件
  7. 洛谷 P1021 邮票面值设计
  8. 50个Bootstrap扩展插件
  9. 十分钟搭建App主流框架
  10. SQLite – 删除表