hdu 3986(最短路+枚举)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3986

思路:先spfa求出最短路,然后枚举删除最短路上的边,每次删除一条边,就求一次最短路,然后去最大的那个就行了。。。可以重边的问题没考虑完善,wa了好多次啊!!!

View Code
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<vector>
 5 using namespace std;
 6 const int MAXN=1000+10;
 7 const int inf=1<<30;
 8 struct Node{
 9     int v,w,id;
10 };
11 vector<Node>vet[MAXN];
12 int path[MAXN];
13 int dist[MAXN];
14 bool visited[MAXN];
15 bool mark[MAXN*50];
16 int id[MAXN];
17 int n,m;
18 bool tag;
19 
20 void SPFA(int u){
21     for(int i=1;i<=n;i++)dist[i]=inf;
22     dist[u]=0;
23     memset(visited,false,sizeof(visited));
24     queue<int>Q;
25     Q.push(u);
26     while(!Q.empty()){
27         int u=Q.front();
28         Q.pop();
29         visited[u]=false;
30         for(int i=0;i<vet[u].size();i++){
31             int v=vet[u][i].v;
32             int w=vet[u][i].w;
33             int ID=vet[u][i].id;
34             if(mark[vet[u][i].id])continue;
35             if(dist[u]+w<dist[v]){
36                 dist[v]=dist[u]+w;
37                 if(tag)path[v]=u,id[v]=ID;//这边只需第一次的时候记录路径就行了。。。
38                 if(!visited[v]){
39                     Q.push(v);
40                     visited[v]=true;
41                 }
42             }
43         }
44     }
45 }
46 
47 
48 int main(){
49     int _case;
50     scanf("%d",&_case);
51     while(_case--){
52         scanf("%d%d",&n,&m);
53         for(int i=1;i<=n;i++)vet[i].clear();
54         memset(path,-1,sizeof(path));
55         memset(mark,false,sizeof(mark));
56         //memset(id,0,sizeof(id));
57         for(int i=1;i<=m;i++){
58             int u,v,w;
59             scanf("%d%d%d",&u,&v,&w);
60             Node p1,p2;
61             p1.v=u,p2.v=v;
62             p1.w=p2.w=w;
63             p1.id=p2.id=i; //每次输的时候边的id是一样的
64             vet[u].push_back(p2);
65             vet[v].push_back(p1);
66         }
67         tag=true;
68         SPFA(1);
69         tag=false;
70         if(dist[n]==inf){
71             printf("-1\n");
72             continue;
73         }
74         int ans=0;
75         bool flag=true;
76         for(int u=n;u!=-1;u=path[u]){
77             //由于有重边,故每次要找不同id的
78             mark[id[u]]=true;
79             SPFA(1);
80             mark[id[u]]=false;
81             if(dist[n]==inf){
82                 printf("-1\n");
83                 flag=false;
84                 break;
85             }
86             ans=max(ans,dist[n]);
87         }
88         if(flag){
89             printf("%d\n",ans);
90         }
91     }
92     return 0;
93 }

 

### starRC、LEF 和 DEF 文件的 EDA 工具使用教程 #### 关于 starRC 的使用说明 starRC 是由 Synopsys 开发的一款用于寄生参数提取 (PEX) 的工具,在 detail routing 完成之后被调用,以提供精确的电阻电容延迟分析数据[^2]。该工具能够处理复杂的多层互连结构并支持多种工艺节点。 对于 starRC 的具体操作指南,通常可以从官方文档获取最权威的信息。访问 Synopsys 官方网站的技术资源页面,可以找到最新的产品手册以及应用笔记等资料。此外,还可以通过在线帮助系统获得交互式的指导和支持服务。 #### LEF 和 DEF 文件格式解析及其在 Cadence 中的应用 LEF(Library Exchange Format)和 DEF(Design Exchange Format)是两种广泛应用于集成电路布局布线阶段的标准文件格式之一[^3]。前者主要用于描述标准单元库中的元件几何形状;后者则记录了整个芯片版图的设计信息,包括但不限于各个模块的位置关系、网络连接情况等重要细节。 当涉及到这些文件类型的编辑或读取时,Cadence 提供了一系列强大的平台级解决方案,比如 Virtuoso Layout Editor 就可以直接打开并修改 LEF/DEF 格式的项目工程。为了更好地理解和运用这两种文件格式,建议参阅 Cadence 发布的相关培训材料或是参加其举办的专项课程学习活动。 ```bash # 示例命令:查看 LEF 或 DEF 文件内容 cat my_design.lef cat my_design.def ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值