First you have to have a good idea of the total square feet of the total roof.
Then is the roof going to be stripped or gone over the top? A bundle of new shingles figure $20, bit high but for estmating. Three bundles are a square. Square is 100 square feet. Divide your total square footage of roof by 100, multiple by $60. Gives you approximate materials cost.
Labor can be all over the lot. Figure $200 per square for low ball estimate.
That allows you to come up with your own lowball estimate. Get local estimates to see what it really will take.
Note: Roofers typically take into consideration height of roof, type of access, type of roof in making an estimate. The amount of cutting involved will vary the costs. Hips cost more than flat roofs. More labor, more waste.
In general a well experienced, well equipped roofer will have the lowest costs. The hardest part of the job is getting the shingles up on the roof / stripping the old layers. A roofer who uses a supplier with boom
trucks saves a lot of costs.
Also note the same roof will cost different depending on a particular contractor work load and the season. In lean periods a contractor tends to bid cheaper to get work. The other consideration is quality of materials used. Be sure high quality shingles are used. Usually today that means Architectural style shingles rated at least 25 years. Get addresses of former jobs and go to see the work. Talk to owner. It pays to pay extra for the best shingles available. Read the contract, fully understand when the job will start and project time. Get start date in writing.
I have little experience with metal roof. You can do the same estimates by pricing a unit of metal roofing. A good contractor will have source of better quality materials at cheaper prices than found in a normal home improvement center.
The better roofing contractors will probably only do roofing but all types to include rubber, metal, tar / gravel, asphalt, etc. Many also will do gutters, drains, best to have that done at the same time if required.