惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
Vercel News
Vercel News
D
DataBreaches.Net
Microsoft Azure Blog
Microsoft Azure Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Cloudbric
Cloudbric
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
月光博客
月光博客
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hugging Face - Blog
Hugging Face - Blog
Security Latest
Security Latest
T
Threatpost
GbyAI
GbyAI
K
Kaspersky official blog
S
SegmentFault 最新的问题
Schneier on Security
Schneier on Security
V
V2EX
W
WeLiveSecurity
Recorded Future
Recorded Future
WordPress大学
WordPress大学
L
LINUX DO - 最新话题
O
OpenAI News
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
The Last Watchdog
The Last Watchdog
有赞技术团队
有赞技术团队
Attack and Defense Labs
Attack and Defense Labs
N
News | PayPal Newsroom
H
Help Net Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Webroot Blog
Webroot Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Troy Hunt's Blog
腾讯CDC
Scott Helme
Scott Helme
P
Privacy & Cybersecurity Law Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
E
Exploit-DB.com RSS Feed

博客园 - zy_nic

SRM 424 div1 900 ProductOfPrices 翻译 .. emacs的c++mode contest contest 我的2-sat模板 Solution to GCJ Practice Contest Problem C, Cycles 约瑟夫问题的数学方法 我的模板 图的应用 今天的比赛 关于建图的 死老鼠安装成功 pku3141 先帖个题目上来 hnu 11028 hnu 11015 joj 儿死三八 pku 1273
pku3411
zy_nic · 2007-10-03 · via 博客园 - zy_nic

dfs搜索,last记录上次到某城市的已经能够预付的路,位压缩

#include <iostream>
using namespace std;

int ans;

int a[11],b[11],c[11],p[11],r[11],last[11];

int n,m;

int const inf = 1000000000;

void DFS(int now,int state,int mon)
{

    
int i,j;

    
if (now==&& mon<ans) ans=mon;

    
int sta=state;

    
for (i=0;i<m;i++)

        
if (c[i]==now)

            state
=state | (1<<i);

    
for (i=1;i<=n;i++)

        
if (last[i]!=state || last[i]==-1)
        
{

            
int mm=inf;

            
for (j=0;j<m;j++)
                
if (a[j]==now && b[j]==i)

                  
if ( (1<<j) & state )
                  
{
                      
if (p[j]<mm) mm=p[j];
                  }

                  
else
                  
{
                       
if (r[j]<mm) mm=r[j];
                  }


            
           
if (mm==inf) continue;

           
int ori=last[i];

           last[i]
=state;

           DFS(i,state,mon
+mm);

           last[i]
=ori;

        }


    state
=sta;
}


int main()
{
    
while (cin>>n>>m)
    
{
        
int i;

        
for (i=0;i<m;i++)
            cin
>>a[i]>>b[i]>>c[i]>>p[i]>>r[i];


        ans
=inf;

        memset(last,
-1,sizeof(last));

        last[
1]=0;

        DFS(
1,0,0);

        
if (ans==inf) cout<<"impossible"<<endl;
        
else

        cout
<<ans<<endl;
    }


    
return 0;



}